2017-05-12 2 views
0

私の目的のために、アプリケーションが実行されている限り(フォアグラウンドまたはバックグラウンド)、CONNECTIVITY_CHANGEブロードキャストを聴く必要があります。アプリがバックグラウンドであってもブロードキャストを受信する予定がある場合、どこでBroadcastReceiverの登録を解除する必要がありますか?

onDestroy()メソッドで登録を解除すると、最初のアクティビティが上に移動したため、最初のアクティビティに戻ると受信者が失われます。

私がonPause()で登録を解除した場合、アプリがバックグラウンドで実行されていても強制終了されていないときは変更を聞くことができません。

これは、強制的にアプリが強制終了されたときに受信機が意図を漏らしている原因です。

私の場合の理想的な解決策は何でしょうか?事前に

感謝:)

+0

https://developer.android.com/topic/performance/background-optimization.html#connectivity-action – ianhanniballake

答えて

1

アプリは力である場合、それはあなたが何をするかに関係なくリークが発生します、停止しました。あなたが強制停止しているときは、何かを登録解除する機会はありません。

あなたの疑問にお答えするには、長期間の受信者を登録して後で登録を解除する必要がある場合、その回答はサービスにあります。

+0

この情報をお寄せいただき、ありがとうございました。他の答えでそれを見つけられませんでした。 一時的な回避策の観点から、どのように「有害」が意図を漏らしていますか?副作用はありますか? –

+0

あまり有害ではありません。これらのリークが発生した2つの実際のシナリオがあります。受信機がまだ必要で、強制的に閉鎖されています。この場合、害はありません。または、受信者が不要で過去に登録を解除したはずです。この場合、アプリには害はありませんが、アプリはその受信者で処理イベントを使用する必要のないリソースを使用していました。有害なのは、CPUのサイクルが無駄になり、バッテリーの電力がいくらかです。だからそこに最小の害。 –

+0

偉大な、それは私の問題を解決します。 サービスにもっと読んで、私のユースケースで試してみましょう。 ありがとうございました! –

関連する問題