22

マニフェストに BroadcastReceiver を登録することと、プログラムで登録することの主な違いを理解しようとしています...

私の理解は基本的に次のとおりです(何か不足している場合は、誰かが私のポイントを修正していただければ幸いです)。

  • マニフェストに登録:

    1. OS は、アプリケーションの実行状態に関係なく、必要に応じて魔法のようにクラスを見つけてインスタンス化し、onReceive() メソッドを呼び出します。
    2. receive はブロードキャストごとに 1 回だけ呼び出されます (つまり、マニフェストに登録することは、ブロードキャストを受信するために「クラス」を登録するようなものであり、ブロードキャストは必要に応じてクラスをインスタンス化します) (??)
  • プログラムで登録:

    1. コードで登録するということは、クラスのインスタンスを登録してブロードキャスト メッセージを受信することを意味します (つまり、コードが少しずさんで、何度も登録すると、複数の BroadcastReceiver インスタンスがすべて onReceive() で呼び出されることになります)。放送
    2. 登録を解除するには、以前に登録した特定の BroadcastReceiver インスタンスを登録解除する必要があります
    3. アプリケーションが OS によって破棄された場合、 onReceive() メソッドはブロードキャストのために呼び出されません

ありがとう

4

3 に答える 3

21

あなたはそれを基本的に正しいと思います。

マニフェストに登録されたレシーバーオブジェクトは1回だけ使用されることに注意してください。BroadcastReceiverブロードキャストごとに、の新しいインスタンスが作成されます。マニフェストに登録された受信機の主な用途は、コードがメモリにないときに進行する可能性のあるブロードキャストです(たとえば、BOOT_COMPLETEDを介してスケジュールされたアラームAlarmManager)。

于 2010-09-06T14:04:25.883 に答える
5

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

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

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

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

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

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

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

于 2013-12-12T05:23:30.047 に答える