文章目录
- 一、简介
- 二、使用
- 1、定义数据并添加数据改变监听
- 2、改变数据
- 三、LiveData相关操作
- 四、小结
一、简介
LiveData 是一种基于 观察者模式 的响应式数据存取类。它的亮点在于 生命周期 的管理,使得其 订阅者Observer 只在 Activity、Fragment 或者 Server 活跃的时候才进行操作。避免了后台刚刚忙完活儿,准备拿 UI 赋值数据,却发现 UI 已经挂了的尴尬场景。
二、使用
LiveData 组件的主类是 LiveData
,但是这个类是个抽象类,其唯一(核心库)的实现类为 MutableLiveData
,所以我们使用的对象就是该类。而该类仅仅是继承了 LiveData
,实现了该实现的,零额外功能添加。
该类有一个 泛型,用于动态定义 LiveData 的数据类型。
1、定义数据并添加数据改变监听
/*** 某 Activity 中*/
private val liveData = MutableLiveData<Boolean>()liveData.observe(this, Observer {value->Log.e("liveData",value.toString())
})
observer(LifecycleOwner,Observer)
的第一个参数就是关联的生命周期组件,因为在 ComponentActivity 之后的Activity 和 Fragment 都实现了 LifecycleOwner 接口,所以传入 this
即可;而第二参数就是数据回调接口,当 liveData
的数据发生改变,那么就会回调匿名类 Observer { }
的 onChanged(T)
方法(上面代码使用lambda隐藏了),并且里面的代码一定是在主线程中执行的。
2、改变数据
改变数据的方式有两种:liveData.setValue(T)
和 liveData.postValue(T)
,这两者的区别在于前者只能在主线程中使用,后者可以在任意线程中使用(LiveData setValue和postValue的区别及详解)。
liveData.setValue(true)
控制台输出:
true
三、LiveData相关操作
留个坑位……
四、小结
LiveData 源码很少,但是作为一个组件,其功能封装的特别好,扩展性也十分强大,实用性特别高,似乎哪里都有它的身影。它的出现直接解决了因为生命周期的原因导致更新UI出异常的尴尬。