lifecycle就是为了方便管理activity和fragment的生命周期,在相应生命周期处去执行相应方法。
lifecycleOwner:一个接口,生命周期拥有者,一般指activity和fragment。
public interface LifecycleOwner {
@NonNull
Lifecycle getLifecycle();
}
lifecycleObserver:生命周期观察者。通过一个自定义类来实现这个接口,之后在拥有者中去添加这个观察者。
Lifecycle:抽象类,定义了添加观察者、删除观察者,以及拿到当前视图的状态的方法。且其中通过枚举来定义相关的时间和状态。
LifecycleRegistry:Lifecycle的具体实现类。
大概实现:
activity和fragment实现了lifecycleOwner,所以可以直接使用getlifecycle。他们的具体是在ComponentActivity中实现的。这个类实现了lifecycleOwner接口,并在getLifecycle()返回了LifecycleRegistry实例。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSavedStateRegistryController.performRestore(savedInstanceState);
ReportFragment.injectIfNeededIn(this);
if (mContentLayoutId != 0) {
setContentView(mContentLayoutId);
}
}
...
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
通过ReportFragment.injectIfNeededIn(this)来分发生命周期事件。ReportFragment的作用就是用来获取生命周期的(没有布局文件)。而在这个ReportFragment中,最终使用LifecycleRegistry的handleLifecycleEvent方法处理事件。