注册(LiveData的注册生命周期)


LiveData.java
------------------------------
@MainThread
public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer) {
assertMainThread("observe");(http://www.amjmh.com/v/)
if (owner.getLifecycle().getCurrentState() == DESTROYED) {
// ignore
return;
}
LifecycleBoundObserver wrapper = new LifecycleBoundObserver(owner, observer);
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;
}

//通过activity获取LifecycleRegistry,将回调方法封装成一个LifecycleBoundObserver传进去
owner.getLifecycle().addObserver(wrapper);
}
可以看到,LiveData 里面的注册 Lifecycles 流程在这个 observe 方法里。

owner.getLifecycle() 就是在 Activity/Fragment 中获取到 LifecycleRegistry。将回调方法封装成一个 LifecycleBoundObserver 实体后注册到 Activity/Fragment 的功能。

posted @ 2019-08-19 20:26  李艳艳665  阅读(405)  评论(0编辑  收藏  举报