概述
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来作为默认计数。
最后
以上就是专注超短裙为你收集整理的初识Kotlin 之8__探究Jetpack__LiveData的使用的全部内容,希望文章能够帮你解决初识Kotlin 之8__探究Jetpack__LiveData的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复