初识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来作为默认计数。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kotlin LiveData 是用于 Android 开发的一个特性,它是一个发布-订阅模式的数据源。LiveData 允许你创建可以被观察(即订阅)的数据对象,从而让你的组件知道数据何时发生变化。这使得数据更新更加透明,并且可以轻松地将数据传递给依赖它的组件。 使用 Kotlin LiveData 的基本步骤如下: 1. 创建一个 LiveData 对象:LiveData 对象是你想要发布的数据的公共视图。你可以将任何可变的、可观察的数据(如变量、属性或对象)封装在 LiveData 对象中。 ```kotlin val liveData = MutableLiveData<Int>() ``` 2. 将数据设置为 LiveData 对象:你可以通过调用 LiveData 对象的 set 方法将数据发布出去。 ```kotlin liveData.value = 42 ``` 3. 将 LiveData 对象传递给依赖它的组件:你可以将 LiveData 对象传递给任何需要它的组件,如 ViewModel 或 Activity/Fragment。这样,当 LiveData 中的数据发生变化时,所有订阅该数据的组件都会收到通知。 4. 使用观察者更新 UI:一旦你订阅了 LiveData 对象,你就可以在 UI 中使用观察者来更新 UI。当数据发生变化时,UI 将自动更新。 LiveData 的优点包括: * 它提供了一种简单的方法来处理数据更新,使得组件之间的通信更加清晰和一致。 * 它允许你将数据传递给任何需要它的组件,而无需手动复制或传递数据。 * 它支持多线程操作,可以在异步操作中安全地更新 LiveData 对象。 需要注意的是,LiveData 是用于在后台线程中维护数据的,并且不能被外部观察者修改。因此,如果你需要修改数据并通知外部观察者,你可能需要使用其他方法,如使用 ViewModel 或其他观察者模式实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值