之前看到很多中文博客说:
LiveData在实体类里可以通知指定某个字段的数据更新;
MutableLiveData则是完全是整个实体类或者数据类型变化后才通知.不会细节到某个字段。
看的我是一头雾水,于是去StackOverflow搜了下,高赞答案却主要在说:
LiveData is immutable. MutableLiveData is LiveData which is mutable & thread-safe (LiveData是不可变的,MutableLiveData是可变的)
如果我们进一步看看MutableLiveData.java仅有40多行的源码,就会发现确实后者说的对,MutableLiveData仅仅是暴露出来了setValue和postValue方法:
// **仅精简了注释**
// LiveData which publicly exposes setValue(T) and postValue(T) method.
public class MutableLiveData<T> extends LiveData<T> {
// Creates a MutableLiveData initialized with the given {@code value}.
public MutableLiveData(T value) {
super(value);
}
// Creates a MutableLiveData with no value assigned to it.
public MutableLiveData() {
super();
}
@Override
public void postValue(T value) {
super.postValue(value);
}
@Override
public void setValue(T value) {
super.setValue(value);
}
}
最后,在Android官方的应用架构指南里,也同时用到了二者。
它是在ViewModel内部使用了private的MutableLiveData实例,但对外暴露的是LiveData类型,按我的理解,目的应该是防止误修改吧。
网友评论