When to unregister BroadcastReceiver? In onPause(), onDestroy(), or onStop()?

不想你离开。 提交于 2019-11-28 21:08:33

it depends on where you have register the receiver. The complementary method pairs are

onCreate - onDestroy
onResume - onPause
onStart  - onStop

if you register the receiver in the first one then unregister it in it's ending method.

From the Android documentation:

You should implement onStop() to release activity resources such as a network connection or to unregister broadcast receivers.

Then, I would follow these pairs (using @StinePike's analogy):

onResume - onPause
onStart  - onStop

Because of the Android Lifecycle, and as @w3bshark mentioned:

In post-HoneyComb (3.0+) devices, onStop() is the last guaranteed handler.

An broadcast receiver is an invisible component. All it does it respond to some kind of an change via onReceive() callback.

So it makes sense to activate them , only when your activity is in a state to respond or when it is becoming Enabled /active - which is when onResume() is called.

So it is a better practice to register in onResume() - When activity is visible & Enabled and unregister in onStop() when activity is no longer Active.

It is just as simple as that, if you want to listen for events even when your activity is not visible then call unregister in onStop() (E.g From Activity A you open Activity B but if you want A to still listening for the events).

But when you only want to listen only for events when your activity is visible then in onPause call unregister() (E.g From Activity A you opened Activity B but now you do not want to listen for events in activity A).

Hope this helps your problem.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!