我是靠谱客的博主 帅气热狗,最近开发中收集的这篇文章主要介绍LiveData 和 MutableLivedata的区别LiveData VS MutableLiveDataLiveData 解析,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
大纲
- LiveData VS MutableLiveData
- LiveData 解析
- LiveData中的几个重要函数
- `public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer)`
- `public void observeForever(@NonNull Observer<? super T> observer)`
- `postValue(T value)` 和`setValue(T value)`
- `public T getValue()`
LiveData VS MutableLiveData
首先来看看LiveData
和 MutableLiveData
之间的一个最直接关系
LiveData
类的源文件
public abstract class LiveData<T> {
protected void postValue(T value) {}
@MainThread
protected void setValue(T value) {}
}
MutableLiveData
类的源文件
public class MutableLiveData<T> extends LiveData<T> {
// code snippet
@Override
public void postValue(T value) {
super.postValue(value);
}
@Override
public void setValue(T value) {
super.setValue(value);
}
}
一句话总结就是: MutableLiveData
实现了LiveData
的setValue(T value)
和postValue(T value)
这两个接口.仅此而已.
LiveData 解析
/**
* LiveData是一个可以被生命周期观察的持有数据的类,
* 换句话来说就是: 在`Observer` 去观察了 `LifecycleOwner` 的状态后(需要是在STARTED 和 RESUMED状态),当数据发生变化的时候`Observer` 会收到通知.
* {@link #observeForever(Observer)} is considered as always active and thus will be always notified
* about modifications. For those observers, you should manually call
* {@link #removeObserver(Observer)}.
*
* 被添加到LifecycleOwner的Observer会在LivecycleOwner状态变为DESTROYED时被立即移除. 这一点在fragment 和 activity中最为有用,并且不必担心内存溢出问题
* 在这里需要注意两个函数
* `onActive()` 当可用的Observer从0变为1的时候会被调用,具体到业务来说就是通过该回调可以知道这个LiveData被使用了
* `onInactive()` 当可用的Observer从0变为1的时候会被调用,具体到业务来说就是一切数据改变的通知都准备好了,就等着lifecycle满足条件了;毕竟你不可能在PAUSE的时候去更新数据吧,更新数据只能是在STARTED 和 RESUMED状态时才可以
LiveData中的几个重要函数
介绍一下一些重要的函数和字段.
public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer)
- 在mainthread中将
observer
添加到observers列表中,如果LiveData已经被设置了数据,则数据会被传递给observer. observer
当且仅当在livecycleowner的状态为STARTED和RESUME的时候才可以接收到数据.- 当LifecycleOwner的状态为DESTROYED时,
observer
会被自动移除. - 如果数据变动了,但是owner不具有接收数据的条件,则owner不会收到数据;但是如果一旦owner具备了接收数据的条件之后,会自动的将最新的数据更新到owner.
- LiveData 会持有一个observer的强引用,直到owner 变为DESTORYED状态.在owner变为DESTORYED时,会自动将该强引用移除.
- 如果重复给owner添加同一个observer,则该动作会被忽略.
- 如果尝试给owner更新observer,则会报出IllegalArgumentException
public void observeForever(@NonNull Observer<? super T> observer)
- 需要在MainThread中调用.
- 和observe类似,只不过这里的observer不会被自动remove,反之需要手动remove
postValue(T value)
和setValue(T value)
setValue(T)
需要在MainThread中执行.- postValue是说post一个Task到MainThread,简而言之就是可以在非MainThread执行.
public T getValue()
- 获取当前LiveData的数据,这里需要注意的是: 在后台进程调用的时候,无法确保获取到最新的数据.
最后
以上就是帅气热狗为你收集整理的LiveData 和 MutableLivedata的区别LiveData VS MutableLiveDataLiveData 解析的全部内容,希望文章能够帮你解决LiveData 和 MutableLivedata的区别LiveData VS MutableLiveDataLiveData 解析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复