將接收器註冊到onResume()並在onPause()方面取消註冊與Activity生命週期有關的部分。
private MyReceiver mReciever;
...
...
@Override
public void onResume(){
super.onResume();
/* Create the receiver if it doesn't exist already */
if(mReceiver == null){
mReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter("SOME_FILTER");
registerReceiver(mSentReceiver, filter);
}
}
@Override
public void onPause(){
super.onPause();
/* Unregister the receiver if it isn't null */
if(mReceiver != null){
unregisterReceiver(mReceiver);
}
}
如果應用程序被殺死(當發生這種情況時一切都會丟失),接收器將不會被激活。但是,如果您在其中註冊的活動/片段尚未被垃圾收集,則該應用仍處於前景/後臺。
如果通過AndroidManifest進行註冊,則接收者在所有活動/片段中都會被全局激活。你希望在活動/片段中註冊接收者,當你希望它只對那個特定活動/片段有效時(兩者相互耦合/相互依賴)。但是,如果沒有活動片段/活動的依賴關係,您將使用AndroidManifest聲明。
使用'LocalBroadCastReceiver'。來自系統的廣播是全球性的。出於安全原因,最好使用'LocalBroadCastReceiver'。 – Raghunandan