下面提供一个使用 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 的使用有所帮助!