-
当Activity停止时不会引发奔溃,不需要解决生命周期带来的问题;
-
组件和数据相关的内容能够实时更新到UI;
-
对于横竖屏切换时不需要做额外的处理来保存数据,解决了Configuration Change问题。
LiveData源码分析
在分析源码前,我们需要大概知道,LiveData内部保存了LifecycleOwner和Observer,利用LifecycleOwner感知并处理声明中期的变化,Observer在数据改变时遍历所有观察者并回调方法。因为LiveData并不复杂离开了LifecycleOwner、Observer,LiveData可能啥都不是。接下来我按照正常的调用顺序来分析源码。
new MutableLiveData<>()
首先LiveData是抽象类不能直接初始化,我们需要使用MutableLiveData创建。我们直接去看它的父类的构造函数,两种实现,带参数的是用外部传进来的引用并且mVersion+1;不带参的,NOT_SET由LiveData自己内部创建,mVersion为-1。
static final Object NOT_SET = new Object();
public LiveData(T value) {
mData = value;
mVersion = START_VERSION + 1;
}
public LiveData() {