应用程序终止后,Receiver是否会收听?

时间:2016-01-11 03:50:41

标签: android broadcastreceiver

我最近查看了this question,我在代码中使用registerReceiver(new BroadcastReceiver() ...方法从内部Activity函数中注册了一个新的接收器(例如,在某些按钮点击时调用)

我的问题是,当app被杀时,接收器是否仍然处于活动状态?如果活动完成并启动另一项活动怎么样?如果它只是经历onStop() onStart()周期或onPause() onResume()怎么办?

我应该使用某些服务运行registerReceiver吗?但话说回来,当我的应用程序被某个任务管理器杀死时,这也会导致我的服务中断?

1 个答案:

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