初识Kotlin 之8__探究Jetpack__LiveData的使用

LiveData是Jetpack提供的一种响应式编程组件,它可以包含任何类型的数据,并在数据发生变化的时候通知给观察者。

 

LiveData通常与ViewModel结合在一起使用,  我们可以回到   初识Kotlin 之2__探究Jetpack  再回顾思维导图。

一 LiveData的基本用法

在之前,我们一直在Activity中手动获取ViewModel 中的数据, 但是ViewModel却无法将数据的变化主动通知给Activity. 

那么能否这样思考?  把Activity 的实例传给ViewModel,  这样ViewModel不就能主动对Activity通知了吗?   

不能这样做!

因为ViewModel的生命周期是长于Activity 的,  如果把Activity 的实例传给ViewModel,  可能会因为Activity 无法释放而造成内存泄漏。  

要解决这个问题,就是使用LiveData,  即: 将变化的数据用LiveData来包装, 然后在Activity 中去观察它, 就可以主动将数据变化通知给Activity了。

在上篇博文基础上, 修改MainViewModel中的代码,如下所示:

这里我们将 counter 变量修改成一个MutableLiveData 对象, 并指定它的泛型为Int,  表示它包含的是整型数据。 MutableLiveData是一种可变的LiveData, 它的用法很简单, 主要有3种读写数据的方法, 分别是getValue()、 setValue()、postValue()方法

  • getValue() 方法用于获取LiveData中包含的数据;
  • setValue() 方法用于给LiveData设置数据, 但是只能在主线程中调用; 
  • postValue()用于在非主线程中给LiveData设置数据。

可以看到, 这里在init {} 给counter设置数据, 这样之前保存的计数值就可以在初始化的时候得到恢复。

plusOne() 方法中的逻辑是先获得counter中包含的数据, 然后给它加1, 再重新设置到counter中,注意调用LiveData的getValue() 方法所获得的数据可能为空,

因此这里使用了一个?:操作符, 当获取到的数据为空时, 就用0来作为默认计数。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值