7

私は簡単な放送受信機を書いています。以前、マニフェストとコードの両方にレシーバーを登録しました。私の目的では、これは特別なことをする必要のないシンプルな受信機です。

この場合、一方の方法を他方よりも選択する理由はありますか?マニフェストへの受信者の登録はより効率的ですか(より速く実行されます)?それとも基本的に同じですか?

私が書いているアプリケーションは非常に効率的である必要があり、2つの方法の実際的な違いについての良い情報を見つけることができなかったので、私は尋ねています。私は、コーディングのベストプラクティスに従おうとしています。

乾杯

4

4 に答える 4

2

どちらか一方の実装の効率については言えませんが (私の直感では、実際には問題に近すぎることがわかります)、Cristian の回答で示唆されている理由により、プログラムで登録および登録解除すると、アプリがより効率的になる可能性があります。 .

マニフェストに登録すると、ブロードキャスト レシーバーは、フィルターに一致するインテントによって常に起動されます。プログラムで登録すると、特定の時間にのみレシーバーを起動できるようにすることができ、どのインテントがいつレシーバーを起動するかを制御できます。

必要のないときに受信機を起動することが本当に心配な場合は、コードでプログラムで実行してください。常に登録を解除し、受信者が期待どおりに常に登録されていることを確認するように、より注意する必要がありますが、これを正しく行うと、受信者を不必要にウェイクアップすることを回避でき、効率をいくらか節約できます。 .

于 2011-10-24T19:34:22.717 に答える
0

シナリオ次第です。

いつ、どの方法で登録するか

BroadcastReceiver を登録するために使用する方法は、アプリがシステム イベントを処理する方法によって異なります。アプリがシステム全体のイベントについて知りたいのには、基本的に 2 つの理由があると思います。

  1. あなたのアプリは、これらのイベントに関する何らかのサービスを提供しています

  2. あなたのアプリは、状態の変化に優雅に反応したいと考えています

最初のカテゴリの例は、デバイスが起動するとすぐに動作する必要があるアプリ、またはアプリがインストールされるたびに何らかの作業を開始する必要があるアプリです。Battery Widget Pro または App2SD は、この種のアプリの良い例です。このタイプの場合、BroadcastReceiver をマニフェスト ファイルに登録する必要があります。

2 番目のカテゴリの例は、アプリが依存する状況の変化を通知するイベントです。アプリが確立された Bluetooth 接続に依存しているとします。状態の変化に対応する必要がありますが、それはアプリがアクティブな場合のみです。この場合、静的に登録されたブロードキャスト レシーバは必要ありません。動的に登録されたものの方が合理的です。

静的に登録することさえ許可されていないイベントもいくつかあります。この例は、毎分ブロードキャストされる Intent.ACTION_TIME_TICK イベントです。静的な受信機はバッテリーを不必要に消耗させるため、これは賢明な決定です。

于 2013-12-12T05:26:08.527 に答える