安卓JetPack篇——Livadata
LiveData
一、什么是LiveData
1、一句话解释:
LiveData 是会自动更新 UI 的数据容器,省去手动管理数据与界面同步的麻烦。
2、核心功能:
- 数据与界面自动绑定:数据变化时自动通知观察者(界面)更新UI,无需手动调用更新方法。
- 生命周期感知:自动随界面的生命周期启停,避免内存泄漏或无效更新。(界面销毁后不再通知)。
对比handler需要手动管理,否则会内存泄漏。
3、一句话讲原理:
使用观察者模式并配合LifeCycle,在数据变化时自动通知处于活跃状态(如 STARTED
/RESUMED
)的 UI 组件更新,并在 UI 销毁时自动解除观察,避免内存泄漏。
二、基本用法
1、常在ViewModel中搭配使用
class MyViewModel : ViewModel() {// 使用 MutableLiveData 存储可修改的数据private val _counter = MutableLiveData<Int>(0)// 对外暴露不可变的 LiveData(防止外部修改)val counter: LiveData<Int> = _counterfun increment() {_counter.value = _counter.value?.plus(1) // 更新数据}
}
2、在 Activity/Fragment 中观察数据
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
// 观察 LiveData 数据变化
viewModel.counter.observe(this) { count ->
// 当 counter 数据变化时,自动更新 UI(仅在界面活跃时触发)binding.textView.text = "Count: $count"
}
binding.button.setOnClickListener {viewModel.increment() // 触发数据更新
}
三、核心方法
1、postvalue:一般在子线程中使用
2、setvalue:必须在主线程中使用