下面提供一个使用 Kotlin 讲解 Android Lifecycle 的示例,包含 LifecycleObserver、LiveData 和 ViewModel 的使用,帮助你理解如何在 Kotlin 中管理 Activity 的生命周期。


1. 添加依赖

在你的 build.gradle 文件中添加 Lifecycle 相关依赖(版本号可根据项目需求调整):

1
2
3
4
5
6
7
dependencies {
// Lifecycle 组件依赖
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
// 单独使用 ViewModel 与 LiveData(推荐这种方式,依赖更明确)
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"
}

2. 使用 LifecycleObserver 监听生命周期变化

使用 Kotlin 编写一个 LifecycleObserver 类,通过注解监听生命周期事件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import android.util.Log

class MyObserver : LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreateEvent() {
Log.d("MyObserver", "onCreate 触发")
}

@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStartEvent() {
Log.d("MyObserver", "onStart 触发")
}

@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroyEvent() {
Log.d("MyObserver", "onDestroy 触发")
}
}

然后在 Activity 中注册这个观察者:

1
2
3
4
5
6
7
8
9
10
11
12
13
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// 注册 LifecycleObserver
val observer = MyObserver()
lifecycle.addObserver(observer)
}
}

这样,MyObserver 中的方法会在对应的生命周期事件时自动调用。


3. 使用 LiveData 与 ViewModel

定义 ViewModel

创建一个继承自 ViewModel 的类,使用 MutableLiveData 来管理数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class MyViewModel : ViewModel() {
// 内部可修改的 LiveData
private val _myData = MutableLiveData<String>()
// 对外只暴露不可变的 LiveData
val myData: LiveData<String> = _myData

init {
loadData()
}

private fun loadData() {
// 模拟异步加载数据,这里直接赋值
_myData.value = "Hello, Lifecycle in Kotlin!"
}
}

在 Activity 中观察 LiveData

在 Activity 中获取 ViewModel,并观察 LiveData 数据变化,自动更新 UI:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// 获取 ViewModel 实例
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

// 观察 LiveData 的变化
viewModel.myData.observe(this, Observer { data ->
// 当数据变化时,这里的代码会自动执行,比如更新 UI
Log.d("MainActivity", "接收到数据:$data")
})
}
}

在这个例子中,LiveData 会自动感知 MainActivity 的生命周期,仅在界面处于活跃状态时更新数据,从而避免内存泄露问题。


总结

  • LifecycleObserver:通过注解方法自动监听 Activity 或 Fragment 的生命周期,简化了传统生命周期回调的代码管理。
  • LifecycleOwner:Activity 和 Fragment 默认实现此接口,可直接使用 lifecycle.addObserver() 注册观察者。
  • LiveData 与 ViewModel:配合使用可以自动更新 UI,处理配置变化(如屏幕旋转)时数据不会丢失,同时减少内存泄露风险。

这种方式能让你编写的代码更加模块化、易于维护和测试。希望这个 Kotlin 示例对你理解 Android Lifecycle 的使用有所帮助!