动态注册的BroadcastReceivers能否在组件/应用程序死亡后幸存?

时间:2013-12-20 21:28:13

标签: android android-activity broadcastreceiver android-lifecycle

在活动中取消注册动态注册的BroadcastReceiver失败有何影响?将运行即使在活动被销毁之后也会调用它的onReceive()(如果与其意图过滤器匹配的广播被触发,则为ofc)?即使这个过程被杀了?


相关(docs

  

如果在Activity.onResume()实现中注册接收者,则应在Activity.onPause()中取消注册。 (暂停时不会收到意图,这将减少不必要的系统开销)。不要在Activity.onSaveInstanceState()中取消注册,因为如果用户在历史堆栈中向后移动,则不会调用此方法。

这是否意味着BRs 仅在onPause运行(如果在活动中注册)时才有效,因为我在姜饼的实验实验(他们确实离开了) - 或如果我取消注册然后我将不会收到意图(如here所述)?

编辑:实际上我posted这是文档的问题

1 个答案:

答案 0 :(得分:2)

  

在活动中取消注册动态注册的BroadcastReceiver失败有何影响?

我怀疑可能会有一些可能的结果,但这取决于BroadcastReceiver注册的内容以及它是一个独立的类还是Activity的内部类。< / p>

  

即使在活动被破坏后它会运行吗?

目前还不清楚“跑”是什么意思。从技术上讲,注册BroadcastReceiver仅仅因为注册而没有“运行”。有效地注册只是将“钩子”放入Android消息传递系统,其中onReceive(...)方法是回调。如果广播与BroadcastReceiver's意图过滤器匹配,那么它的“正在运行”生命是从onReceive(...)的调用的开始到结束。

  

即使这个过程被杀了?

没有。由于Android应用程序的所有组件都在一个进程中运行(有一些例外,例如进程外Services),一旦进程被终止,BroadcastReceiver就会被它杀死。< / p>

  

这是否意味着BR只有onPause运行才会有效(如果在活动中注册)......

正如我上面提到的,BroadcastReceiveronReceive(...)方法生命期内只是'有效' - 在其他时候,它没有实例化,只是处于“已注册”状态。

  

...或者,如果我取消注册,那么我将不会收到意图(如此处所述)?

同样,正如我上面提到的,注册只是告诉操作系统接收者希望接收与意图过滤器匹配的通知(广播)。如果它未注册,那么系统将删除该特定BroadcastReceiver类的'hook'(回调),因此它不会被实例化并传递相关的Intent