Jetpack学习笔记-Lifecycle

官方文档:

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)

你可能感兴趣的:(Jetpack学习笔记-Lifecycle)