我试图了解是否有任何潜在的伤害,等待onDestroy取消注册听众.我特别提到从eventbus(奥托)退订,但相信答案适用于大多数listener pattern的实现(SharedPreferenceListener,LocationListener,static参考文献等).
我已经看到了 这个问题的其他几个答案引用了"onDestroy不能保证被调用"的短语.完整的onDestroy 文档文本实际上是:
注意:不要指望这种方法被称为保存数据的地方!例如,如果某个活动正在编辑内容提供程序中的数据,那么这些编辑应该在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此处.通常实现此方法是为了释放与活动相关联的线程之类的资源,以便在其应用程序的其余部分仍在运行时,被破坏的活动不会留下这些东西.在某些情况下,系统会简单地杀死活动的托管进程,而不会在其中调用此方法(或任何其他方法),因此它不应该用于执行在进程消失后保留的内容.
我理解这意味着onDestroy不应该用于保存数据,因为在应用程序进程被杀死之前可能无法调用它(如生命周期图所示).
简单地说,由于没有调用onDestroy,是否存在注册为侦听器的Activity可能被泄露的情况?
是否存在由于未调用onDestroy而导致注册为侦听器的Activity泄露的情况?
不是我能想到的.但是,这与以下内容不同:
在onDestroy中取消注册侦听器 - 有什么危害?
在早期生命周期方法(例如,onPause()/ onStop())中取消注册侦听器的原因是因为当活动不在前台时,活动不需要这些事件.
您的应用程序已经必须处理活动被销毁的情况,例如用户按下BACK按钮,然后用户稍后返回到应用程序中的相同位置.您将需要创建活动的新实例,并且该活动实例将需要从某些数据源获取所需的任何内容.因此,如果该代码有效,您可以使用相同的"获取它需要的任何东西"逻辑来刷新现有活动实例返回到前台时.IOW,根据您获取数据的位置,将返回的活动与新创建的活动区别开来.
| 归档时间: |
|
| 查看次数: |
3331 次 |
| 最近记录: |