esi*_*ver 13 android activity-lifecycle android-lifecycle
我正在构建一个实现该LifecycleObserver接口的Android Java类.
这是构造函数:
public MyObserver(AppCompatActivity activity) {
this.mActivity = new WeakReference<AppCompatActivity>(activity);
activity.getLifecycle().addObserver(this);
}
Run Code Online (Sandbox Code Playgroud)
是否有必要使用以下内容进行呼叫removeObserver:
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void destroyListener() {
if (this.mActivity.get() != null) {
this.mActivity.get().getLifecycle().removeObserver(this);
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以永远观察吗?
TL;DR:你最好在完成后明确删除观察者,或者使用自动处理这个的东西,比如LiveData.
Lifecycle是一个abstract类。因此,从技术上讲,您不知道实现是什么以及游戏规则是什么。
一个具体Lifecycle是LifecycleRegistry。它对观察者有很强的引用。因此,现在您指望LifecycleRegistry及时进行垃圾收集,例如活动被销毁时。对于FragmentActivity,情况似乎如此。所以在实践中,对于所有这些东西的当前版本,你可以在不注销观察者的情况下逃脱,并且几乎不会受到不良影响,如果有的话。
但这不是Lifecycle合同的一部分。可以说,任何体面的实现Lifecycle(或使用的东西LifecycleRegistry)都应该干净地处理您无法取消注册的情况……但我不会冒险。