2011-02-22 16 views
2

私は標準的なローカルアンドロイドサービスから始め、リスナーとバインダーを使って通信しました。それから、私はオリエンテーションの変更を処理することに深刻な問題があることに気づき始めました。バインダー全体をスキップし、渡す必要があるすべてのデータ/コマンドを含むブロードキャストインテント(およびstartServiceのみを使用しています)に行きました。Android - バインダーからブロードキャストへ

私の質問は、このアプローチを使用する際に注意しなければならない落とし穴のいくつかです。

欠点はありますか?

答えて

1

APIレベル4以上をサポートしている場合は、setPackage()を使用して、「ブロードキャスト」を「ナローキャスト」にして、アプリ内でブロードキャストを維持します。デフォルトでは、ブロードキャストは本当にすべてのアプリにブロードキャストされます。これはあなたのデータには良いことかもしれません。

BroadcastReceiverの登録を忘れないでください(登録しないでください)。同時に、サービスが終了し、アクティビティが長い間消えた場合(たとえば、戻るボタン)には、何をすべきかを検討する必要があります。 1つのアプローチは、低優先度のマニフェスト登録レシーバで順序付きブロードキャストを使用し、ブロードキャストを処理するアクティビティがない場合はNotificationを送信することです。this sample appは私の意図を示しています。

ブロードキャストアプローチの代わりにMessengerと考えることができます。これは、本質的に「ナローキャスト」で、おそらくオーバーヘッドが少なく、リークすることができないためです。私はまだ構成の変更でこれを使用する仕組みに取り組んでいます。

+0

"流出できません" - 私の方法はどうやって漏れる? – yydl

+1

@Joseph: 'registerReceiver()'を介して 'BroadcastReceiver'を登録し、それを登録解除しないと、自動的に削除されるかどうか不安です。あなたは確実に 'LocationListener'と' SensorEventListener'をこのように漏らすことができます。 – CommonsWare

関連する問題