0

私のアクティビティは、アプリの周りのハンドラーをサービスのワーカー スレッドと共有します。スレッドはハンドラを使用して sendMessage() アクティビティを処理するには handleMessage() を使用します

アクティビティはバックグラウンド Android で終了し、戻ってくると再び開始されます。

アクティビティはサービスの静的メソッドを呼び出して、サービス中のスレッドの最後のステータス (最後の sendMessage() が何であったか) をチェックします。サービス スレッドの最後のメッセージに基づいて UI ステータスを初期化できるようにするため

Message m = SyncService.lastSyncMessage();

何らかの理由で、メッセージ m 内のバンドルが有効な場合 (キーと値のペアが含まれる) と、キーと値が存在しない場合があります。

ハンドラ経由で UI にメッセージを転送するスレッド側のコードは次のようになります。

  Handler uiHandler = UIGlobals.getHandler();
  Message msg = uiHandler.obtainMessage();
  Bundle msgBundle = new Bundle();

  msgBundle.putInt("status", syncEv.status.ordinal());
  msgBundle.putString("param", syncEv.param);

  msg.setData(msgBundle);
  if(uiHandler.sendMessage(msg))
  {
    lastMessage = msg;
  }

サービスの静的メソッド

   public static Message lastSyncMessage()
{
    return lastMessage;
}
4

1 に答える 1

0

Message オブジェクトはプールから取得されました。アクティビティがなくなると、ハンドラーのコールバックは使用できないオブジェクトを指します。Android は、プールで使用するためにメッセージ参照を再準備するようです。それを解決するために、メッセージではなく静的メンバーに実際のイベントを格納しました。

于 2012-11-16T18:40:58.167 に答える