我最近查看了this question,我在代码中使用registerReceiver(new BroadcastReceiver() ...
方法从内部Activity函数中注册了一个新的接收器(例如,在某些按钮点击时调用)
我的问题是,当app被杀时,接收器是否仍然处于活动状态?如果活动完成并启动另一项活动怎么样?如果它只是经历onStop()
onStart()
周期或onPause()
onResume()
怎么办?
我应该使用某些服务运行registerReceiver
吗?但话说回来,当我的应用程序被某个任务管理器杀死时,这也会导致我的服务中断?
答案 0 :(得分:3)
在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声明。