将接收器注册到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