Jetpack篇——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 之后的ActivityFragment 都实现了 LifecycleOwner 接口,所以传入 this 即可;而第二参数就是数据回调接口,当 liveData 的数据发生改变,那么就会回调匿名类 Observer { }onChanged(T) 方法(上面代码使用lambda隐藏了),并且里面的代码一定是在主线程中执行的

2、改变数据

改变数据的方式有两种:liveData.setValue(T)liveData.postValue(T),这两者的区别在于前者只能在主线程中使用,后者可以在任意线程中使用(LiveData setValue和postValue的区别及详解)。

liveData.setValue(true)

控制台输出:
true

三、LiveData相关操作

留个坑位……

四、小结

LiveData 源码很少,但是作为一个组件,其功能封装的特别好,扩展性也十分强大,实用性特别高,似乎哪里都有它的身影。它的出现直接解决了因为生命周期的原因导致更新UI出异常的尴尬

猜你喜欢

转载自blog.csdn.net/catzifeng/article/details/106844518