文章目录
- 前言
- 关键类介绍
- Lifecycle
- LifecycleObserver
- LifecycleOwner
- LifecycleRegistry
- 关键类UML类图关系
- 生命周期注册
- 生命周期分发
- 总结
- 结语
前言
关键类介绍
Lifecycle
定义:
用于存储有关组件(如 activity 或 fragment)的生命周期状态的信息,并允许其他对象观察此状态。
- 它是一个
抽象类
,具体实现类为LifecycleRegistry
; - 内部提供了
addObserver(LifecycleObserver observer) 添加观察者
、removeObserver(LifecycleObserver observer)移除观察者
方法; - 内部封装了
State【状态】
、Event【事件】
枚举类,以及一系列事件状态处理方法;
@MainThread@NonNullpublic abstract State getCurrentState();public enum Event {ON_CREATE,ON_START,ON_RESUME,ON_PAUSE,ON_STOP,ON_DESTROY,ON_ANY;@Nullablepublic static Event downFrom(@NonNull State state) {switch (state) {case CREATED:return ON_DESTROY;case STARTED:return ON_STOP;case RESUMED:return ON_PAUSE;default:return null;}}@Nullablepublic static Event downTo(@NonNull State state) {switch (state) {case DESTROYED:return ON_DESTROY;case CREATED:return ON_STOP;case STARTED:return ON_PAUSE;default:return null;}}@Nullablepublic static Event upFrom(@NonNull State state) {switch (state) {case INITIALIZED:return ON_CREATE;case CREATED:return ON_START;case STARTED:return ON_RESUME;default:return null;}}@Nullablepublic static Event upTo(@NonNull State state) {switch (state) {case CREATED:return ON_CREATE;case STARTED:return ON_START;case RESUMED:return ON_RESUME;default:return null;}}@NonNullpublic State getTargetState() {switch (this) {case ON_CREATE:case ON_STOP:return State.CREATED;case ON_START:case ON_PAUSE:return State.STARTED;case ON_RESUME:return State.RESUMED;case ON_DESTROY:return State.DESTROYED;case ON_ANY:break;}throw new IllegalArgumentException(this + " has no target state");}}@SuppressWarnings("WeakerAccess")public enum State {DESTROYED,INITIALIZED,CREATED,STARTED,RESUMED;//传入的state是否存在public boolean isAtLeast(@NonNull State state) {return compareTo(state) >= 0;}}
构成Activity生命周期的状态和事件,其对应关系图如下:
由上图我们可以很容易理解其中定义的方法:
//根据传入的state获取逆序【生命周期结束方向】需要向下移动的事件public static Event downFrom(@NonNull State state) {switch (state) {case CREATED:return ON_DESTROY;case STARTED:return ON_STOP;case RESUMED:return ON_PAUSE;default:return null;}}//根据传入的state获取逆序【生命周期结束方向】触发state的事件public static Event downTo(@NonNull State state) {switch (state) {case DESTROYED:return ON_DESTROY;case CREATED:return ON_STOP;case STARTED:return ON_PAUSE;default:return null;}}//根据传入的state获取正序【生命周期上升方向】需要向下移动的事件public static Event upFrom(@NonNull State state) {switch (state) {case INITIALIZED:return ON_CREATE;case CREATED:return ON_START;case STARTED:return ON_RESUME;default:return null;}}//根据传入的state获取正序【生命周期上升方向】触发state的事件public static Event upTo(@NonNull State state) {switch (state) {case CREATED:return ON_CREATE;case STARTED:return ON_START;case RESUMED:return ON_RESUME;default:return null;}}
LifecycleObserver
生命周期观察者
,用来监听Activity生命周期变化;其子类常用的有DefaultLifecycleObserver
、LifecycleEventObserver
;
public interface LifecycleEventObserver extends LifecycleObserver {//生命周期变化回调void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event);
}
LifecycleOwner
具有生命周期的类,对应被观察者
,提供获取getLifecycle()方法
,ComponentActivity
类实现该接口;
public interface LifecycleOwner {@NonNullLifecycle getLifecycle();
}
LifecycleRegistry
Lifecycle
类的具体实现类,于ComponentActivity内部创建
,其内部持有LifecycleOwner
引用,通过维护mState【当前状态】
、mObserverMap【存储观察者对象】
等变量实现生命周期同步以及分发;
关键类UML类图关系
小结:
LifecycleOwner
作为被观察者,其被ComponentActivity
实现,同时ComponentActivity
内部持有LifecycleRegistry
对象,其提供添加、移除观察者LifecycleObserver
方法,而从持有注册的观察者集合,一旦Activity生命周期变化时,LifecycleOwner
便会触发LifecycleRegistry
对象中的方法,并由LifecycleRegistry
将事件分发给注册的观察者们;