2

したがって、基本的に、アプリには A と B の 2 つの主要な機能があり、どちらも起動時に何かを行います。そこで、2 つの BroadcastReceiver R1 と R2 を作成しました。どちらも BOOT_COMPLETED インテントを受け取ります。R1 にはかなり複雑なロジックがあり、機能 A を処理します。R2 のロジックは非常に単純で、B を処理します。

私の問題は、両方のブロードキャスト レシーバーを維持し、それぞれが BOOT_COMPLETED インテントをリッスンするようにしてコードをクリーンに保つ必要があるかどうか、またはそれらを組み合わせてパフォーマンスを向上させる必要があるかどうかを決定することです。

同じインテントを 1 つではなく 2 つ受け取ると、パフォーマンス ヒットはどのくらい大きくなりますか? send-receive-intent プロセスはアプリで 1 回または 2 回発生しますか?

また、BOOT_COMPLETED は、ユーザーがアプリを起動できるときに、ブートが完全に終了した後にのみ送信されますか?

編集: テスト後、同じアプリで同じインテントを 2 つのコンポーネントで受信する場合と 1 つのコンポーネントで受信する場合の違いは、およそ数ミリ秒です。

4

3 に答える 3

4

android:priority プロパティを使用して、これらのレシーバーを制御し、特定の順序で実行させることができます。優先度番号が最も高いアクティビティが最初に実行されます。このようなもの:

<activity
     android:name="First activity">
     <intent-filter android:priority="10" >
          <action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD" />
     </intent-filter>
</activity>

<activity
     android:name="Second activity">
     <intent-filter android:priority="1" >
          <action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD" />
     </intent-filter>
</activity>

このリンクにこれに関する情報があります

android:priority フィルタによって記述されたタイプのインテントの処理に関して、親コンポーネントに与えられるべき優先度。この属性は、アクティビティとブロードキャスト レシーバーの両方にとって意味があります。これは、フィルタに一致するインテントにアクティビティがどの程度応答できるかについての情報を、インテントに応答する可能性のある他のアクティビティと比較して提供します。インテントが優先度の異なる複数のアクティビティによって処理される可能性がある場合、Android は優先度の値がより高いアクティビティのみをインテントの潜在的なターゲットと見なします。これは、ブロードキャスト メッセージを受信するためにブロードキャスト レシーバが実行される順序を制御します。優先度の値が高いものは、値が低いものより先に呼び出されます。(順序は同期メッセージにのみ適用されます。非同期メッセージでは無視されます。

値は、「100」などの整数である必要があります。数値が大きいほど優先度が高くなります。デフォルト値は 0 です。値は -1000 より大きく、1000 未満でなければなりません。

setPriority() も参照してください。

于 2013-01-23T10:03:29.863 に答える
3

サムの答えに加えて...

また、BOOT_COMPLETED は、ユーザーがアプリを起動できるときに、ブートが完全に終了した後にのみ送信されますか?

キーガードが出現する頃に送信されます。ポイントは「その頃」です。多くのブートタイム レシーバーがあり、それらはすべて不定の順序でブロードキャストを受信します。ブロードキャストを受信する正確な時刻や、その時点でのシステムの正確な状態 (たとえば、インターネットに接続していない可能性がある) について、仮定しないでください。

于 2012-08-24T00:01:10.993 に答える
1

BroadcastReceivers は、本質的にアクティビティから独立しています。

  • アクティビティ A とアクティビティ B が同じアプリケーションの一部である場合は、それらを組み合わせて、1 つの BroadcastReceiver のみを使用することをお勧めします。
  • それらが異なるアプリ用であり、アプリを個別にリリースする予定がある場合、それらは 2 つの異なるエンティティのままにする必要があります。
于 2012-08-23T23:49:53.627 に答える