0.前言
我们可以看到,viewModel和liveData都与lifecycle有关系,所以理解这一部分的源码也让我们对Jatpack的理解会更深一步
这一部分的源码,我感觉我不需要自己去写了…网上有大佬自动就写了很多,自己总结,其实也差不多这么一回事.
这里贴出原贴大佬,并且,自己将一个简易流程写出来看,就差不多了.
1.原贴
大佬的时序图(必看),以及一些流程
https://blog.csdn.net/zhuzp_blog/article/details/78871374
看不太懂就看第二遍,这里涉及到初始化的问题.
https://blog.csdn.net/gdutxiaoxu/article/details/86660766
第三遍,逼乎大佬多.这里的说法会比较简洁,也容易看懂一些.
这里重要的是讲多了一个ReflectiveGenericLifecycleObserver类,最终的追踪位置
https://zhuanlan.zhihu.com/p/352118804
可以理解为终极版本,到ReflectiveGenericLifecycleObserver反射的那些注解调用好像也讲了.
https://blog.csdn.net/u012845099/article/details/110262474
2.过程
从
getLifecycle()进入认识到LifecycleRegistry类.
LifecycleRegistry mLifecycleRegistry;
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
而addobserver()可以看到该函数mObserverMap,理解为将观察者添加到Map中.
而添加完后的观察者会先触发一次sync(),使其状态同步
LifecycleRegistry类中
public void addObserver(@NonNull LifecycleObserver observer) {
enforceMainThreadIfNeeded("addObserver");
State initialState = mState == DESTROYED ? DESTROYED : INITIALIZED;
ObserverWithState statefulObserver = new ObserverWithState(observer, initialState);
ObserverWithState previous = mObserverMap.putIfAbsent(observer, statefulObserver);
///.....
///.....
if (!isReentrance) {
// we do sync only on the top level.
sync();
}
///...
///...
}
-------------------------------------------分割符----------------------------------------------
了解Fragment到底哪里让观察者触发了其函数.
看mLifecycleRegistry 中哪里触发了什么函数。
可以看到在Fragment中performCreate()和performXX()中
有触发该函数mLifecycleRegistry.handleLifecycleEvent(STATE)
void performCreate(Bundle savedInstanceState) {
onCreate(savedInstanceState);
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
}
-------------------------------------------分割符----------------------------------------------
跟踪handleLifecycleEvent()进入到moveToState()中
看到sync()函数
–>forwardPass()看到重要的一句
bserver.dispatchEvent(lifecycleOwner, event);观察者进行事件的分发.
继续跟踪到达 mLifecycleObserver.onStateChanged(owner, event);
onStateChanged为LifecycleEventObserver的接口函数.
static class ObserverWithState {
State mState;
LifecycleEventObserver mLifecycleObserver;
ObserverWithState(LifecycleObserver observer, State initialState) {
mLifecycleObserver = Lifecycling.lifecycleEventObserver(observer);
mState = initialState;
}
void dispatchEvent(LifecycleOwner owner, Event event) {
State newState = event.getTargetState();
mState = min(mState, newState);
mLifecycleObserver.onStateChanged(owner, event);
mState = newState;
}
}
其中该方法的具体实现在ReflectiveGenericLifecycleObserver类中.
该类对方法进行了反射的调用等等…
这差不多大概就是如此了.
3.总结
就是activity中添加了一个无界面的ReportFragment .
然后对该Fragment的生命周期进行了一个观察者模式的监听。
最后调用了 observer 的 onStateChange 方法,去通知相应的 observer。