在Android中,我在我的onCreate()中注册了BroadcastReceiver。我应该在哪里取消注册,以便我不会泄露接收者?何时取消注册onCreate中注册的广播接收器?
回答
当您不想或不能接收广播时,您应该取消注册。
http://developer.android.com/reference/android/content/BroadcastReceiver.html
“你可以动态注册这个类Context.registerReceiver()或静态的实例,通过您的AndroidManifest.xml注意标签发布的实现:如果注册在活动的接收器。 onResume()实现中,你应该在Activity.onPause()中注销它(暂停时你不会收到意图,这将减少不必要的系统开销)。不要在Activity.onSaveInstanceState()中取消注册。
:) SDK是你最好的朋友。我会说做它在SDK中说的,除非你在暂停时绝对需要接收器,但要小心。你是否必须动态注册接收器,或者将它放在AndroidManifest.xml中更好?如果您将接收器放入清单中,则无需担心注册/取消注册。
到目前为止,我已经经历了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完成),不确定这是最佳实践。
现在为什么要动态注册?
如果没有很好的理由对这个广播接收器那么很可能你应该用正确的意图过滤清单文件注册它不通过注册/注销再被人打扰。
当您在创建方法中重新调用广播接收器时,如果您取消注册onDestroy()
method.it,那我会更好一些,它只是一个覆盖方法,当您的应用程序被销毁时会被调用。
- 1. 取消注册已接收短信的广播接收器
- 2. 如何注册广播接收器?
- 3. 如何在Android中取消注册广播接收器
- 4. 广播接收器的问题,注册的广播接收器
- 5. 注册广播接收器清单中
- 6. 何时何地我应该取消注册广播接收机?
- 7. 取消注册在活动中注册的所有广播接收机
- 8. Android广播接收器注册问题
- 9. 注册广播接收器编程
- 10. 广播接收器未注册
- 11. 动态注册广播接收器
- 12. 在onDestroy()和onSaveInstanceState()上取消注册广播接收器
- 13. 取消注册服务中的广播
- 14. Android - 何时注册/取消注册在活动中创建的广播接收器?
- 15. 广播接收器 - 如果在onResume/onPause上注册/取消注册,您是否会错过一些广播?
- 16. Android广播接收器注册清单时需要注销吗?
- 17. 问题的广播接收器(接收器未注册错误)
- 18. 广播接收器注册和注销未在Android的
- 19. 注册广播接收器对于接收到的SMS
- 20. Android:从小部件注册和注销广播接收器(ACTION_TIME_CLICK)
- 21. 如何从广播接收器中取消注册听众和停止服务
- 22. 如何在Android小部件中取消注册SMS广播接收器
- 23. ConnectivityManager.CONNECTIVITY_ACTION,注册接收器时总是广播吗?
- 24. 在运行时注册广播接收器?
- 25. 注册到广播接收器时出错
- 26. 在onReceive中取消注册Android广播接收器会引发“Receiver not registered”
- 27. 如何注册Manifest的广播接收器?
- 28. 在服务中注册SCREEN_ON/SCREEN_OFF的广播接收器
- 29. 从清单中注册的广播接收器更新UI
- 30. 清单与活动中的广播接收器注册
注代替的onPause,从蜂窝出发,活性不killable直到之后的onStop,所以有可能在的onStop注销(与在onStart相应的寄存器)。 – Tom 2012-03-06 00:37:50