Jetpack 中 Lifecycle 用法
2021-03-19 本文已影响0人
马路牙子666
Lifecycle
API 参考文档
androidx.lifecycle
生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。
Lifecycle 利用观察者模式在 Activity 或者 Fragment 走了对应的生命周期方法,在自己写的 LifecycleObserver 类中回调对应方法。
Activity生命周期

Fragment生命周期

Lifecycle.Event对应生命周期监听方法有
ON_CREATE Activity方法 onCreate
ON_START Activity方法 onStart
ON_RESUME Activity方法 onResume
ON_PAUSE Activity方法 onPause
ON_STOP Activity方法 onStop
ON_DESTROY Activity方法 onDestroy
ON_ANY 此方法在走任何生命周期的同时都会调用该方法,如定义回调生命周期方法,会在执行回调之后再调用此方法。
Fragment 同理对应上面方法。
再 onPause onStop onDestroy 生命周期方法执行时,会先执行自定义的Lifecycle生命周期方法在执行Activity或者Fragment对应生命周期方法。
日志可以查出调用顺序
D/TAG-MainActivity: onCreate-activity
D/TAG-MyLifecycle: onCreateLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MainActivity: onStart-activity
D/TAG-MyLifecycle: onStartLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MainActivity: onResume-activity
D/TAG-MyLifecycle: onResumeLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MyLifecycle: onPauseLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MainActivity: onPause-activity
D/TAG-MyLifecycle: onStopLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MainActivity: onStop-activity
D/TAG-MyLifecycle: onDestroyLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MainActivity: onDestroy-activity
源码如下
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
class MainActivity : AppCompatActivity() {
companion object {
const val TAG_LIFECYCLE: String = "TAG-MyLifecycle"
const val TAG_MAIN: String = "TAG-MainActivity"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycle.addObserver(MyLifecycle())
Log.d(TAG_MAIN, "onCreate-activity")
}
override fun onStart() {
super.onStart()
Log.d(TAG_MAIN, "onStart-activity")
}
override fun onResume() {
super.onResume()
Log.d(TAG_MAIN, "onResume-activity")
}
override fun onPause() {
super.onPause()
Log.d(TAG_MAIN, "onPause-activity")
}
override fun onStop() {
super.onStop()
Log.d(TAG_MAIN, "onStop-activity")
}
override fun onDestroy() {
super.onDestroy()
Log.d(TAG_MAIN, "onDestroy-activity")
}
class MyLifecycle : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreateLifecycle() {
Log.d(TAG_LIFECYCLE, "onCreateLifecycle")
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStartLifecycle() {
Log.d(TAG_LIFECYCLE, "onStartLifecycle")
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResumeLifecycle() {
Log.d(TAG_LIFECYCLE, "onResumeLifecycle")
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPauseLifecycle() {
Log.d(TAG_LIFECYCLE, "onPauseLifecycle")
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStopLifecycle() {
Log.d(TAG_LIFECYCLE, "onStopLifecycle")
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroyLifecycle() {
Log.d(TAG_LIFECYCLE, "onDestroyLifecycle")
}
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
fun onAnyLifecycle() {
Log.d(TAG_LIFECYCLE, "onAnyLifecycle")
}
}
}