2011-01-06 154 views

回答

0

当您不想或不能接收广播时,您应该取消注册。

21

http://developer.android.com/reference/android/content/BroadcastReceiver.html

“你可以动态注册这个类Context.registerReceiver()或静态的实例,通过您的AndroidManifest.xml注意标签发布的实现:如果注册在活动的接收器。 onResume()实现中,你应该在Activity.onPause()中注销它(暂停时你不会收到意图,这将减少不必要的系统开销)。不要在Activity.onSaveInstanceState()中取消注册。

:) SDK是你最好的朋友。我会说做它在SDK中说的,除非你在暂停时绝对需要接收器,但要小心。你是否必须动态注册接收器,或者将它放在AndroidManifest.xml中更好?如果您将接收器放入清单中,则无需担心注册/取消注册。

+1

注代替的onPause,从蜂窝出发,活性不killable直到之后的onStop,所以有可能在的onStop注销(与在onStart相应的寄存器)。 – Tom 2012-03-06 00:37:50

4

到目前为止,我已经经历了2案件动态广播接收器的注册:

  • 你想注册的广播接收器仅在活动上foregroung,我的意思是,用户实际看到的当前活动的布局。

- >然后广播接收机应在onResume中注册并在onPause中注销。正式文件中给出的正常情况(http://developer.android.com/reference/android/content/BroadcastReceiver.html)。

  • 你想要的广播接收器被注册为接收一个长期持久的行动已经触发(最有可能是服务),用户可以随时暂停活动(例如电源按钮,用户点击)。

- >然后,广播接收机应在onCreate中注册并在onDestroy中注销(由How to unregister BroadcastReceiver确认)。如果不是,当应用程序暂停时,onReceive()方法将不会被调用。
但要小心,onDestroy不保证被调用(点在Android - When to Register/Unregister Broadcast Receivers created in an activity?中提出),所以你必须确保它在某个时候被调用(Activity完成),不确定这是最佳实践。

现在为什么要动态注册?
如果没有很好的理由对这个广播接收器那么很可能你应该用正确的意图过滤清单文件注册它不通过注册/注销再被人打扰。

1

当您在创建方法中重新调用广播接收器时,如果您取消注册onDestroy() method.it,那我会更好一些,它只是一个覆盖方法,当您的应用程序被销毁时会被调用。

相关问题