2016-01-11 40 views
0

我最近查了一下this question,我的代码,一个新的接收器使用registerReceiver(new BroadcastReceiver() ...方法从内部活动功能(称为例如,一些按钮点击)内注册接收器在应用程序终止后进行监听吗?

我的问题是,当应用程序被杀害,将接收器仍然处于活动状态?如果活动自行完成并启动另一项活动,情况如何?而如果它只是经历onStop()onStart()周期或onPause()onResume()

我应该使用某些服务运行registerReceiver吗?但是,再次,当我的应用程序被任务管理器杀死时,这是否也会导致我的服务中断?

+0

使用'LocalBroadCastReceiver'。来自系统的广播是全球性的。出于安全原因,最好使用'LocalBroadCastReceiver'。 – Raghunandan

回答

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声明。

+0

真棒回答,thx –

+0

没问题,随时接受答案,如果它解决了你的问题,或让我知道,如果我能以任何其他方式帮助 –

相关问题