在活动中取消注册动态注册的BroadcastReceiver失败有何影响?将运行即使在活动被销毁之后也会调用它的onReceive()
(如果与其意图过滤器匹配的广播被触发,则为ofc)?即使这个过程被杀了?
相关(docs)
如果在Activity.onResume()实现中注册接收者,则应在Activity.onPause()中取消注册。 (暂停时不会收到意图,这将减少不必要的系统开销)。不要在Activity.onSaveInstanceState()中取消注册,因为如果用户在历史堆栈中向后移动,则不会调用此方法。
这是否意味着BRs 仅在onPause运行(如果在活动中注册)时才有效,因为我在姜饼的实验实验(他们确实离开了) - 或如果我取消注册然后我将不会收到意图(如here所述)?
编辑:实际上我posted这是文档的问题
答案 0 :(得分:2)
在活动中取消注册动态注册的BroadcastReceiver失败有何影响?
我怀疑可能会有一些可能的结果,但这取决于BroadcastReceiver
注册的内容以及它是一个独立的类还是Activity
的内部类。< / p>
即使在活动被破坏后它会运行吗?
目前还不清楚“跑”是什么意思。从技术上讲,注册BroadcastReceiver
仅仅因为注册而没有“运行”。有效地注册只是将“钩子”放入Android消息传递系统,其中onReceive(...)
方法是回调。如果广播与BroadcastReceiver's
意图过滤器匹配,那么它的“正在运行”生命是从onReceive(...)
的调用的开始到结束。
即使这个过程被杀了?
没有。由于Android应用程序的所有组件都在一个进程中运行(有一些例外,例如进程外Services
),一旦进程被终止,BroadcastReceiver
就会被它杀死。< / p>
这是否意味着BR只有onPause运行才会有效(如果在活动中注册)......
正如我上面提到的,BroadcastReceiver
在onReceive(...)
方法生命期内只是'有效' - 在其他时候,它没有实例化,只是处于“已注册”状态。
...或者,如果我取消注册,那么我将不会收到意图(如此处所述)?
同样,正如我上面提到的,注册只是告诉操作系统接收者希望接收与意图过滤器匹配的通知(广播)。如果它未注册,那么系统将删除该特定BroadcastReceiver
类的'hook'(回调),因此它不会被实例化并传递相关的Intent
。