LiveData是什么?
首先贴上官方链接
developer.android.com/topic/libra…
从字面意思上来看,这个是一个活跃,有生命的数据。那为何活跃?活跃与否从何判断?
先来看这么一个类LifecycleOwner

他是一个生命周期的持有者,做为一个android开发来说,这个对大家来说都不陌生,我们所熟知的Activity,Fragment,他们是有典型的生命周期特征,oncreate,onstart,onpause,onstop,ondestory等等,那他们里面的实现是怎样的呢?我这里稍微介绍一下。









前面介绍的差不多,来看看livedata的构造


LiveData怎么用?
首先新建一个livedata的对象,这里用了MutableLiveData,然后observe方法传入了两个参数 一个是owner,另一个是Observer

@MainThread
public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer) {
//要在主线程操作,不然抛异常
assertMainThread("observe");
如果当前owner已经销毁,就不会添加
if (owner.getLifecycle().getCurrentState() == DESTROYED) {
// ignore
return;
}
//这里把observer进行了一层包装,类似rxjava用操作符把下游的observer传入到操作符里面的observer,对结果进行处理,判断后在分发给我们传入的observer
LifecycleBoundObserver wrapper = new LifecycleBoundObserver(owner, observer);
//把我们添加的observer都放到mObservers这个SafeIterableMap里
ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);
if (existing != null && !existing.isAttachedTo(owner)) {
throw new IllegalArgumentException("Cannot add the same observer"
+ " with different lifecycles");
}
if (existing != null) {
return;
}
//真正的把我们的owner和包装后的observer关联起来。
owner.getLifecycle().addObserver(wrapper);
}
那这个LifecycleBoundObserver的包装起了什么作用呢?



出此之外,如果没有lifecycleowner,也可以用observerforever来监听livedata数据的变化,observerforever与observer不同的是他不会自动的remove这个observer,除非你手动调用removeobserver
