Lifecycle原理解析

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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值