小编Kyl*_*vey的帖子

在onDestroy中取消注册侦听器 - 它们有什么危害/可以泄漏?

我试图了解是否有任何潜在的伤害,等待onDestroy取消注册听众.我特别提到从eventbus(奥托)退订,但相信答案适用于大多数listener pattern的实现(SharedPreferenceListener,LocationListener,static参考文献等).

我已经看到 这个问题的其他几个答案引用了"onDestroy不能保证被调用"的短语.完整的onDestroy 文档文本实际上是:

注意:不要指望这种方法被称为保存数据的地方!例如,如果某个活动正在编辑内容提供程序中的数据,那么这些编辑应该在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此处.通常实现此方法是为了释放与活动相关联的线程之类的资源,以便在其应用程序的其余部分仍在运行时,被破坏的活动不会留下这些东西.在某些情况下,系统会简单地杀死活动的托管进程,而不会在其中调用此方法(或任何其他方法),因此它不应该用于执行在进程消失后保留的内容.

我理解这意味着onDestroy不应该用于保存数据,因为在应用程序进程被杀死之前可能无法调用它(如生命周期图所示).

简单地说,由于没有调用onDestroy,是否存在注册为侦听器的Activity可能被泄露的情况?

android otto

5
推荐指数
1
解决办法
3331
查看次数

标签 统计

android ×1

otto ×1