LiveData 的定义与优势
官方对 LIveData 的定义为:
LiveData
是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。
从上述定义可以知道:
- LiveData 是一个
可观察
的数据存储类
; - LiveData 具有
生命周期感知
能力; - LivaData
仅更新
处于活跃生命周期状态( STARTED 或 RESUMED 状态)
的应用组件观察者。
使用 LivaData 的优势
- 确保界面符合数据状态;
- 不会发生内存泄漏;
- 不会因 Activity 的停止而导致崩溃
- 不需要手动处理生命周期
- 数据始终保持最新状态
- 共享资源
- 适当的配置修改
LiveData 的使用
LiveData 基本使用
类型为 LiveData 的对象没有公开的方法给更新其 value,要想更新 LiveData 对象的 value,需要使用 类型为 MutableLiveData 的LiveData 对象,其提供了 setValue(T)
和 postValue(T)
方法,其中如果想在多线程中更新数据只能使用 postValue(T)
方法。
使用步骤主要分三步:
- 创建 LiveData 对象实例(常在 ViewModel 中);
- 创建 Observer 对象(常在 Activity 或者 Fragment 中);
- 使用 observer() 方法将 Observer 对象附加到 LiveData 对象(通常在 Activity 或者 Fragment 中)。
示例如下(由于将可变的 LiveData 暴露给外部是不安全的,因此常见的作法是将其转换为不可变的 LiveData 类型对外部进行提供):
class MyViewModel: ViewModel() {
// 创建 LiveData 对象实例
private val _currentName = MutableLiveData