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