Android 之 Jetpack - Lifecycle
1. 添加依赖(app/build.gradle.kts
)
dependencies {val lifecycleVersion = "2.8.0"implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion")implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion")
}
注:Kotlin 项目需启用 kotlin-kapt
插件支持注解处理
2. 创建 LifecycleObserver(两种实现方式)
方式一:继承 DefaultLifecycleObserver(官方推荐)
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import android.util.Logclass CustomLifecycleObserver : DefaultLifecycleObserver {private val TAG = "LifecycleObserver"override fun onCreate(owner: LifecycleOwner) {Log.d(TAG, "onCreate - State: ${owner.lifecycle.currentState}")}override fun onStart(owner: LifecycleOwner) {Log.d(TAG, "onStart - State: ${owner.lifecycle.currentState}")}override fun onResume(owner: LifecycleOwner) {Log.d(TAG, "onResume - State: ${owner.lifecycle.currentState}")}override fun onPause(owner: LifecycleOwner) {Log.d(TAG, "onPause - State: ${owner.lifecycle.currentState}")}override fun onDestroy(owner: LifecycleOwner) {Log.d(TAG, "onDestroy - State: ${owner.lifecycle.currentState}")}
}
方式二:使用注解(旧版兼容)
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import androidx.lifecycle.Lifecycle
import android.util.Logclass AnnotationLifecycleObserver : LifecycleObserver {private val TAG = "AnnotationObserver"@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)fun setupResources() {Log.d(TAG, "Resources initialized")}@OnLifecycleEvent(Lifecycle.Event.ON_STOP)fun releaseResources() {Log.d(TAG, "Resources released")}
}
3. 在 Activity 中注册观察者
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.Lifecycleclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 注册两种观察者lifecycle.addObserver(CustomLifecycleObserver())lifecycle.addObserver(AnnotationLifecycleObserver())// 实时打印当前生命周期状态(验证状态变化)Log.d("MainActivity", "Current State: ${lifecycle.currentState}") // 输出:CREATED}override fun onResume() {super.onResume()Log.d("MainActivity", "Current State: ${lifecycle.currentState}") // 输出:RESUMED}
}
4. 生命周期状态与事件关系
Lifecycle 的 5 种状态与 7 种事件映射关系:
状态(State) | 触发事件(Event) | 说明 |
---|---|---|
| - | 初始状态(Activity 未创建) |
|
| 在 |
|
| 在 |
|
| 在 |
|
| 在 |