アクティビティとサービス (別のアプリケーションにあります) の間の通信を作成しました。サービスがアクティビティからの呼び出しを受け取ると、新しいスレッドを生成してタスクを実行します。通常、このタスクを完了するには 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 が静的クラスであるためでしょうか? または他にどのような理由がありますか?