0

BroadcastReceiverとIntentServiceの責任に重複があるのは正しいですか?これにより、実行する必要のあるタスクを実行するIntentServiceを起動するBroadcastReceiverをセットアップすることは冗長になることを意味します。どちらもインテントに応答するので、IntentServiceだけをインテントに直接応答させるのは、仲介役としてのBroadcastReceiverなしで簡単です。BroadcastReceiverとIntentServiceの責任の重複

この解釈は正しいですか?それはいつも正しいですか?そうでない場合は、間違った例を挙げてください。

ありがとうございます!

答えて

1

は、私は行われる必要があるいくつかのタスクを実行IntentServiceをトリガーBroadcastReceiverを設定することが冗長になることを意味

だけではなく、必ずしも冗長ではない、それは非常に一般的であるということですパターン。

この解釈は正しいですか?

それは間違っていたときの例を与えてください。

IntentsendBroadcast()またはstartService()と一緒に使用されますか。 IntentsendBroadcast()と一緒に使用すると、サービスが直接応答することはできません。同様に、IntentstartService()と一緒に使用すると、受信者が直接応答することはできません。したがって、誰かがIntentを使用するコードを書いた場合、そのコードの使用方法に合わせる必要があります。 Intentが使用されている一方的に「チャンネルを変更する」ことはできません。

さらに、BroadcastReceiveronReceive()は、常にメインアプリケーションスレッドで呼び出されます。 UIがフォアグラウンドにあるとUIがフリーズしてしまうので、ここで意味のある時間を取ることは望ましくありません。また、onReceive()が返されると、マニフェストに登録された受信者のインスタンスは破棄され、その後すぐにプロセスが終了する可能性があります。したがって、BroadcastReceiverが独自のバックグラウンドスレッドをフォークするのは安全ではありません。アンドロイドはそのスレッドを無視してプロセスを終了させるからです。システムが送信するブロードキャストに応答するための一般的なパターンは、BroadcastReceiverを使用してから、IntentServiceに作業を委任することです。一挙では、両方の問題を解決する:

  • IntentServiceは、それがその仕事をしながら実行してもOSに通知します持つ、Serviceであるため、バックグラウンドスレッド
  • に呼び出され、onHandleIntent()での力仕事を行いますあなたがIntentを作成一つであり、あなたがそのIntentを派遣一つであり、あなたがそのIntentを消費一つであり、あなたがあなたのコードの使用を持つようにしたい場合は、あなたのプロセスは、今より長く

ながら少し生きるようにするにはstartService()を直接呼び出してIntentServiceを呼び出すと、それは完璧です。

関連する問題