バックグラウンド スレッド (サービス内にある可能性があります) を持つ複雑なアプリがあり、インターネットからデータを受信するときに、メインの表示アクティビティを通知する必要があります (いくつかのステータス インジケーターを更新するため)。すべてが同じプロセスで実行されます (そうしない理由はありません)。
ただし、状況によっては、これらのイベントが頻繁に発生する場合があります (1 秒あたり 5 回)。また、アクティビティが表示されていないか、破棄されている場合にも、イベントが発生する場合があります。この質問で唯一目新しいのは、効率の問題だと思います。たとえば、私はまだG1をターゲットにしています。
このスレッドにはいくつかの方法が記載されていますが、どれが十分に効率的で、アクティビティが破棄された場合に機能するかはわかりません。これらの方法は、私が従うことを好む「Android の方法」です。
動作する醜いアンチ Android の方法が 3 つありますが、これらには欠点もあります。
- セマフォで待機しているアクティビティにスレッドがあり、解放されたときに更新を行います。短所: 余分なスレッド、複数のイベント タイプの処理方法
- #1 と同様ですが、同時ブロッキング キュー オブジェクトを使用します。短所: 余分なスレッド、同じタイプのイベントが複数回キューに入る可能性がある (良くない)
- アクティビティのハンドラーへの静的参照を保持し、それを使用してアップデーターを実行します。短所: (a) アクティビティへの参照がリークする可能性がありますか? (b) アクティビティの状態が変わるとどうなりますか? (c) 必要なランナブルが 1 つだけの場合でも、複数のランナブルが存在する可能性があります。