アクティビティとサービス (別のアプリケーションにあります) の間の通信を作成しました。サービスがアクティビティからの呼び出しを受け取ると、新しいスレッドを生成してタスクを実行します。通常、このタスクを完了するには 3 秒かかります。
アクティビティからのメッセージがサービスに届くと、それを保持します。そして、このメッセージの replyTo が null かどうかを確認してください。replyTo が null ではありません。(わかった)
public class RemoteService extends Service{ ... プライベート静的クラス IncomingHandler extends Handler 実装 Observer{ プライベート メッセージ msg; @オーバーライド public void handleMessage(メッセージメッセージ){ //- 到着メッセージを保持 this.msg = msg; //- replyTo の値を確認します メッセンジャーの返信先 = msg.replyTo; if (返信先 != null) Log.d("タグ","返信先 ====///////==== null"); そうしないと Log.d("タグ","返信先 ======== null"); //- タスクを実行する新しいスレッドを生成します 試す{ CustomThread スレッド = 新しい CustomThread(); thread.registerObserver(これ); スレッド.開始(); }キャッチ(例外e){ log.d("タグ",e.getMessage()); } } //- タスクが完了したとき @オーバーライド public void update(int 結果、文字列値) { //- replyTo の値を確認します メッセンジャーの返信先 = msg.replyTo; if (返信先 != null) Log.d("タグ","返信先 ====///////==== null"); そうしないと Log.d("タグ","返信先 ======== null"); //- データを準備する バンドル データ = new Bundle(); data.putString("キー",値); メッセージ message = Message.obtain(null,2,0,0); message.setData(データ); //- メッセージをアクティビティに送信します if (replyTo != null) replyTo.send(メッセージ); } }
タスクが完了すると、それをホストするクラスに通知します。メソッドupdateを呼び出します。handleMessageメソッドでは、replyTo は null ではありません。ただし、3 秒後、更新メソッドでは、replyTo が null になり、クラッシュします。
何故ですか?おそらく、IncomingHandler が静的クラスであるためでしょうか? または他にどのような理由がありますか?