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.Log
class 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.Log
class 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.Lifecycle
class 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 未创建) |
|
|
在 |
|
|
在 |
|
|
在 |
|
|
在 |