Kotlin LiveData使用

前言

目前市面上流行的客户端app的架构基本都是基于MVVM 设计的,因此,学习MVVM就显得格外重要了,MVVM的框架结构网上很多文章都有介绍,这里就不介绍了,上一篇介绍了DataBinding的使用,这边继续学习LiveData,同样是MVVM的重要组成部分。

1 LiveData介绍:

官方介绍的是说:LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 activity、fragment 或 service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。

说简单就是 LiveData 是一个可观察的数据存储类,内部借助了 Lifecycle,从而实现了生命周期感知,同时,这个可观察指的是,在其存储的数据更新时,它会去通知观察者。又因为生命周期感知的存在,所以可以做到 何时通知、何时解绑,从而做到安全无泄漏,就是如此:)

LiveData是基于Lifecycle上开发的,没有 Lifecycle,也不会存在 LiveData,在sdk26以后,Lifecycle已经被写入了我们 Androidx 基础组件,默认会在 ComponentActivity 及 Fragmeent 中初始化,并且支持开发者自行调用 lifecycle 对象,从而添加相应的生命周期观察者,从而免除模版代码。

2 LiveData 的原理

LiveData的工作机制基于观察者模式,其核心原理如下:

数据观察‌:开发者通过调用LiveData的observe方法,将Observer(观察者)与LiveData实例关联起来。Observer可以是一个Activity、Fragment或其他实现了LifecycleOwner接口的对象。

数据更新‌:当LiveData持有的数据发生变化时,有两种方式可以更新数据:setValue(只能在主线程使用)和postValue(可以在任何线程使用,但会在主线程上更新数据)。

通知机制‌:当数据更新后,LiveData会检查当前是否有活跃的Observer(即其宿主Activity或Fragment处于活动状态)。如果有,LiveData会将数据变化通知给这些Observer,Observer随后会在UI线程上更新界面。

3 LiveData 的优势

LiveData在Android架构中扮演着连接数据层和UI层的重要角色,其优势包括:

生命周期感知‌:LiveData能够感知宿主的生命周期,确保在宿主处于活动状态时更新数据,避免在宿主不活跃时进行不必要的UI更新,从而减少资源浪费。

数据一致性‌:LiveData保证了数据状态的一致性,特别是在配置变更(如屏幕旋转)时,能够保持数据不变,避免数据丢失或重复加载。

内存泄漏防护‌:LiveData在宿主销毁时会自动清理与Observer的连接,从而避免内存泄漏。

线程安全‌:LiveData内部处理了线程切换的问题,确保数据更新和UI更新都在正确的线程上执行。

4 LiveData 和 Databinding 的差别

与Data Binding相比,LiveData具有生命周期感知能力,能够更智能地处理数据更新和UI更新之间的关系。而Data Binding更多地关注于将数据直接绑定到XML布局中的UI控件上,减少Java/Kotlin代码中的UI更新逻辑。两者在Android开发中经常结合使用,以实现更高级的数据绑定和响应式编程功能。

5 LiveData 的使用

1 基础用法

1.1 创建LiveData对象

创建MutableLiveData对象,这里我们用基础的String代替

1.2、观察LiveData对象

通过observe方法来监听LiveData的数据变化,每当LiveData发生变化时,都会回调onChanged方法,并返回值的内容Strings

1.3、更新LiveData对象

通过LiveDatasetValue方法,给LiveData赋值,每次赋完值后,都会回调onChanged方法

每次点击按钮都会打印数据,可以在数据更新后进行UI更改

1.4 实体类更新

实体类更新方法相同,就不详细描述了

2 使用MediatorLiveData

上述方法讲的MutableLiveData对象为单个对象,那么有多个数据监听呢,那么,就可以使用MediatorLiveData

MediatorLiveData可以合并多个LiveData源,只要任何原始的LiveData源对象发生更改,就会触发MediatorLiveData对象的观察者。

2.1  创建 MediatorLiveData对象

2.2 创建两个数据源

2.3 添加addSource方法

调用MediatorLiveDataaddSource方法,分别将liveData1liveData2加到MediatorLiveData要监听的数据源中

        

2.4 观察LiveData对象        

不管哪里数据更新,这里都能接收到数据变化,可用于本地更新和网络更新两种状态

6 和viewModel的配合使用

如果多个数据要怎么办,那么就可以使用viewModel结合liveData搭配使用啦,下面示例基本用法,都用基本类型代替

1 创建多个LiveData

写一个自己的Model去继承ViewModel

创建三个数据,分别为Long和String类型,你可以更换成自己的实体类

2 创建 MediatorLiveData

创建MediatorLiveData,并将三个数据添加进去,并定义个获取MediatorLiveData的函数

你也可以定义单个数据的函数

3 在Activity 监听

使用viewModel = ViewModelProvider(this).get(MyViewModel::class.java)  获取viewModle实例,

监听方法相同,就是改成用用viewModel.getLiveData().observe替换liveData.observe,你也可以在viewModel里面写更改数据的函数,然后直接用viewModel调用

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值