当前位置: 代码迷 >> 综合 >> Jetpack篇——LiveData
  详细解决方案

Jetpack篇——LiveData

热度:20   发布时间:2024-01-28 08:46:32.0

文章目录

    • 一、简介
    • 二、使用
        • 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 之后的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出异常的尴尬