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

前端 未结 4 1449
北恋
北恋 2020-12-14 15:23

When should I use unregisterReceiver? In onPause(), onDestroy(), or onStop()?

Note: I need the service to run in the backgroun

相关标签:
4条回答
  • 2020-12-14 15:38

    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.

    0 讨论(0)
  • 2020-12-14 15:48

    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.

    0 讨论(0)
  • 2020-12-14 15:48

    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.

    0 讨论(0)
  • 2020-12-14 15:53

    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.

    0 讨论(0)
提交回复
热议问题