官方文档:
https://developer.android.google.cn/jetpack/androidx/releases/lifecycle?hl=zh-cn#groovy
https://developer.android.google.cn/topic/libraries/architecture/lifecycle?hl=zh-cn
Lifecycle介绍:
官方介绍:
Lifecycleis a class that holds the information about the lifecycle state of a component(like an activity or a fragment) and allows other objects to observe thisstate.
简单来说:Lifecycle是一个持有其他组件(activity、fragment等)的生命周期状态信息的一个类,它可以提供给其他需要使用到生命周期的对象,来订阅观察自己的生命状态。
Lifecycle的出现目的 是为了降低代码耦合,无需在Activity、Fragment中的生命周期方法中处理大量的回调。
核心是采用了观察者模式。
(Lifecycle组件的出现,可以类比Fragment,可以学习下Fragment的生命周期是如何产生的)
使用方式
简单使用:
需要监听生命周期的业务类,实现DefaultLifecycleObserver接口。
在该业务类中实现,需要实现的生命周期方法:如 :onResume()、 onPause()等。
在Activity、Fragment中 getLifecycle().AddObserver(类对象),将业务类注册到需要被监听的组件中
基于以上步骤就可以实现对Activity、Fragment等组件生命周期的监听
核心类
Lifecycle:一个抽象类。整个Lifecycle组件架构的核心,内部包含了生命周期的监听和状态的获取。
有两个内部类: Event、State 这两个枚举类。lifecycle的分发的实现在Event中定义;Lifecycle当前的状态值在State中定义。
LifecycleRegistry:Lifecycle的子类(组件内提供的唯一子类)。是对Lifecycle的实现。主要的工作全都是该类进行生命周期的保存、处理和分发的。
LifecycleOwner:需要被观察、被订阅的Component(Activity、Fragment等),提供生命周期变化的类,需要实现该接口。
LifecycleObserver:需要感知生命周期的业务类。
四个类的关系:
LifecycleObserver 子类:
FullLifecycleObserver : 所有生命周期方法的回调。如果需要监听所有生命周期,实现该接口,
DefaultLifecycleObserver:FullLifecycleObserver的子类接口。使用default 实现了FullLifecycleObserver的所有方法。如果仅需要监听部分生命接口,实现该接口,实现需要的方法即可。
LifecycleEventObserver:只有一个onStateChanged回调方法。该方法回调了所有生命周期变化的监听。代码量相对较少,但是需要判断生命周期类型。
ReflectiveGenericLifecycleObserver、SingleGeneratedAdapterObserver、CompositeGeneratedAdaptersObserver 都是 LifecycleEventObserver的子类,根据需求使用即可。
State与Event关系
Lifecycle中 Event事件虽然有ON_CREATE、ON_START、ON_RESUME、ON_PAUSE、ON_STOP、ON_DESTROY时间,但是跟Activity的生命周期没有任何关系。仅是事件名与activity的生命周期函数命名相同而已。
所以 Lifecycle的State只有INITIALIZED、DESTROYED、CREATED、STARTED、RESUMED五个状态。
扩展:
不是只有Activity、Fragment才能做LifecycleOwner。任何有需要生命周期的组件都可以实现LifecycleOwner。
如View、Service、Application、自定义Component等有生命周期的组件。
Service 生命周期监听的实现
引入lifecycle-service包
implementation "androidx.lifecycle:lifecycle-service:2.3.1“
业务Server,不再继承Service,而是实现LifecycleService。
在业务Service中,getLifecycle().addObserver(new ServiceObserver)
Application 生命周期监听的实现
引入lifecycle-process包
implementation "androidx.lifecycle:lifecycle-process:2.3.1“
在Application onCreate方法中设置监听:
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppObserver)