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

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