Android lifecycle

239 阅读1分钟

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方法处理事件。