广播注册后不解除注册会有什么问题?

1,404 阅读1分钟

广播注册后不解除注册会有什么问题?

如果我们在Activity中使用了registerReceiver()方法注册了一个BroadcastReceiver,如果没在Activity的生命周期内调用unregisterReceiver()方法取消注册此BroadcastReceiver,由于BroadcastReceiver不止被Activity引用,还可能被AMS等系统服务,管理器等之类引用,导致BroadcastReceiver无法被回收,而BroadcastReceiver有持有着Activity引用,(即:onReceive方法中的参数Context),会导致Activity也无法被回收(虽然Activity回调了onDestroy方法,但并不意味着Activity被回收了),从而导致严重的内存泄漏。

我们可以通过两种方式注册BroadcastReceiver,一是在Activity启动过程中通过代码动态注册,二是在AndroidManifest.xml文件中利用标签进行静态注册。

1).对于第一种方法,我们需要养成一个良好的习惯:在Activity进入停止或者销毁状态的时候使用unregisterReceiver方法将注册的BroadcastReceiver注销掉。

2).对于第二种方法,对于标签注册的,那么该对象的实例在onReceiver被调用之后就会在任意时间内被销毁。

此笔记只用来记录点点滴滴。