Locally managed broadcast receiver leak?

 ̄綄美尐妖づ 提交于 2019-12-10 16:16:44

问题


Is it possible that a local (i.e. managed with LocalBroadcastManager) BroadcastReceiver leaks when the app is killed by the system?

The specific use case for which I need it is that I would like to register/unregister the BroadcastReceiver in an Activity's onCreate/onDestroy (I need the receiver to be active when the activity is not visible), but I wouldn't like to risk causing a memory leak by doing this. As I understand, if a single activity is destroyed by the system, onDestroy runs and the receiver is unregistered. What if the app is killed? Does the receiver remain around, or, being local, does it get killed along with the app?


回答1:


If you peek inside LocalBroadcastManager source code, you'll see it's really just a normal class ("local" as you said) with a Map connecting the various BroadcastReceiver with the corresponding List of IntentFilter.

Nothing is registered at the "system level" so NO: if the app is killed, LocalBroadcastManager class is killed with it and no leak will occur.




回答2:


You should absolutely unregister it in onDestroy because onDestroy doesn't mean your app is finished- just your Activity. Other Activities in your app could still be running, so that receiver would cause a leak.



来源:https://stackoverflow.com/questions/17349588/locally-managed-broadcast-receiver-leak

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