0x1、Lifecycle核心思想
本质上是围绕着这两个设计模式进行的:
模板模式
→ 定义算法骨架,对外开放扩展点,基于 继承 关系实现,子类重写父类抽象方法;观察者模式
→ 对象间定义一对多的依赖,当一个对象状态发生改变,依赖对象都会自动收到通知;
对这两种模式不了解的强烈建议看下笔者之前写的专栏:《把书读薄 | 设计模式之美》。
本节先肝下Lifecycle组件的两个库 lifecycle-common
和 lifecycle-runtime
的源码,了解实现原理,在肝Activity、Fragment中Lifecycle是如何发挥作用的。希望通过这节,能让你在实际开中能够有的放矢,放心大胆地用上Lifecycle。
0x2、lifecycle-common 源码解读
lifecycle-common
包中包含下述文件,挑着看:
① Lifecycle抽象类
类中定义了生命周期事件和状态,先看 Event
,枚举了7种生命周期事件:
ON_CREATE、ON_START、ON_RESUME、ON_PAUSE、ON_STOP、ON_DESTROY、ON_ANY
定义了状态升级、降级的四个方法:
downFrom()、downTo()、upFrom()、upTo()
这里的升降级,读者看了可能会有点懵,可以把之前那个图竖着看:
以downFrom()为例,从传入状态降级,返回对应State:
从CREATED往下走,调用OnDestory,从STARTED往下走,调用onStop(),从RESUME往下走,调用onPause()
嘿嘿,是不是一下子就看懂了,再看下downTo():
往下走到DESTORYED,调用onDestory(),往下走到CREATED,调用onStop(),剩下两个也是类似~
然后还有个 getTargetState()
这个就更好理解了,调用onCreate()、onStop()会处于CREATED状态,其他同理。
说完Event说State,更简单,定义了定义了5个状态的枚举值:
DESTROYED、INITIALIZED、CREATED、STARTED、RESUMED
以及一个判断状态是否相等的方法:
最后定义了三个抽象方法:
addObserver()、removeObserver()、getCurrentState()
可以把Lifecycle看作 抽象被观察者
,抽取出生命周期事件与状态,统一状态流转过程,并提供了增删观察者的抽象方法供 具体被观察者
实现。
② LifecycleObserver接口
空接口,类型标记,可看作 抽象观察者
③ FullLifecycleObserver、LifecycleEventObserver接口
都继承LifecycleObserver接口,提供了两类不同的回调:
一种是详细的生命周期回调,一种是有状态变化就回调,前者优先级大于后者。
④ DefaultLifecycleObserver接口
继承 FullLifecycleObserver,这里用到了Java 8后才有的特性:接口声明默认方法
,默认重写了回调方法,具体观察者
按需实现关注的回调方法即可。
public interface DefaultLifecycleObserver extends FullLifecycleObserver { @Override default void onCreate(@NonNull LifecycleOwner owner) { } @Override default void onStart(@NonNull LifecycleOwner owner) { } @Override default void onResume(@NonNull LifecycleOwner owner) { } @Override default void onPause(@NonNull LifecycleOwner owner) { } @Override default void onStop(@NonNull LifecycleOwner owner) { } @Override default void onDestroy(@NonNull LifecycleOwner owner) { } }
⑤ LifecycleOwner接口
提供一个获取 Lifecycle
的方法: