Jetpack 系列:LifeLifecycles 记录

一、作用:管理您的 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: LifecycleRegistry
    override 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章