android学习

MutableLiveData与LiveData区别:可变与不可

2021-11-05  本文已影响0人  RedB

之前看到很多中文博客说:

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类型,按我的理解,目的应该是防止误修改吧。

官方应用架构指南
上一篇下一篇

猜你喜欢

热点阅读