当前位置: 代码迷 >> 综合 >> Jetpack 系列:LifeLifecycles 记录
  详细解决方案

Jetpack 系列:LifeLifecycles 记录

热度:56   发布时间:2023-12-15 01:31:16.0

一、作用:管理您的 Activity 和 Fragment 生命周期


二、主要的类与接口

  • LifecycleObserver(接口) : 生命周期观察者(观察者)
  • LifecycleOwner(接口) : 生命周期所有者(被观察者)
  • LifecycleRegistry(类) : 是LifeCycle的子类,在自定义LifecycleOwner 时会用到

三、具体使用

1. LifecycleObserver(观察者)使用:

class MyTest : LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) //通过注解标记方法fun create() {
    Log.e("AAA", "Create")  //当 被观察者 的onCreate方法回掉时,此方法会自动调用}@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)fun pause() {
    Log.e("AAA", "Pause")}@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)fun resume() {
    Log.e("AAA", "Resume")}
}

通过一个类实现此接口,通过生命周期注解来标记自己的方法即可,当被观察者的生命周期执行时,会自动调用此类中相应的注解下的方法。

但是,仅仅这样还是无法实现对Activity(Fragment)的生命周期的观察的,你需要让你的Activity实现LifecycleOwner(被观察者)接口,让你的Activity变为一个被观察者,这样观察者(MyTest类)才能观察 被观察者(Activity),实现二者生命周期的统一。


2. LifecycleOwner(被观察者)与 LifecycleRegistry 的使用:

class MainActivity : Activity(), LifecycleOwner {
    private lateinit var lifecycle: LifecycleRegistryoverride fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)lifecycle = LifecycleRegistry(this)lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)val mTest = MyTest()getLifecycle().addObserver(mTest)}override fun onResume() {
    super.onResume()lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)}override fun onPause() {
    super.onPause()lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE)}override fun getLifecycle(): Lifecycle {
    return lifecycle}
}

通过你的Activity(Fragment或者其他自定义的类)实现此接口,然后再从Activity中新建一个LifecycleRegistry类,通过此类的handleLifecycleEvent()方法设置当前状态并通知观察者,然后在 重写的 getLifecycle() 方法中把这个LifecycleRegistry类对象作为返回值,最后通过 getLifecycle().addObserver()方法把自己定义的观察者类(MyTest)与当前的被观察者(Activity)订阅一下,这样Activity的生命周期方法调用时就会自动运行MyTest中相应的方法了。


Ps:Fragment、AppCompatActivity都默认实现了LifecycleOwner接口

所以在使用时,我们直接使用getLifecycle().addObserver()就ok了,其他的都不用我们操作

class Main2Activity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)setContentView(R.layout.activity_main2)val myTest = MyTest()lifecycle.addObserver(myTest)}
}

3. Lifecycle的States与Events:

在这里插入图片描述
你可以将States看作节点,Events看作这些节点中间的边,当执行了ON_CREATE事件后,状态会从INITIALIZED变为CREATED