看过LifeCycle源码的同学可能都能说出来:
LifeCycle 利用 Fragment,进行 Event 分发,然后通过反射执行各个 LifecycleObserver 中对应的Event 注册方法。
其中还引入了一个 State 的概念,那么为什么不 Fragment dispatch Event的时候直接执行到 Observer 里面的相关事件方法, 而要经过一个 State 的概念呢?
参考入口,类名:ReportFragment
#ReportFragment
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
dispatchCreate(mProcessListener);
dispatch(Lifecycle.Event.ON_CREATE);
}
更多问答 >>
-
每日一问 ViewPager 这个流传广泛的写法,其实是有问题的!
2020-03-26 00:10 -
2020-03-23 23:45
-
每日一问 | 自定义控件测量模式真的和 match_parent,wrap_content 一一对应吗?
2020-03-30 01:01 -
每日一问 | Activity 启动动画对页面打开速度有影响吗?
2020-04-22 22:06 -
每日一问 | Fragment 是如何被存储与恢复的? 有更新
2020-06-07 09:01 -
每日一问 今天考察下 Fragment 相关两个不常见 API
2020-03-19 00:55 -
每日一问 | 很久以前有Activity.onResume就是界面可见的说法,这种说法错了多少?
2020-03-15 23:10 -
每日一问 RecyclerView卡片中持有的资源,到底该什么时候释放?
2020-03-10 21:11 -
每日一问 | 事件到底是先到DecorView还是先到Window的?
2020-03-03 23:25 -
每日一问 Android有个GestureDetector很好用?那么你知道它内部是如何实现的吗?
2020-03-02 23:56

设计者将 Lifecycle.Event 作为生命周期的一个点,而将 Lifecycle.State 作为一个线,Lifecycle.State视作一次生命周期的变化。
我们首先看一下源码调用过程在 handleLifecycleEvent函数里,把 Lifecycle.Event转化为了 Lifecycle.State
在这个sync函数里,通过比较 现在传过来的State和监听者所持有的State 的大小 , 如果大,就说明生命周期往前走了,否则就是往后走了。然后以此作为转换为Lifecycle.Event的依据
根据state的大小控制event走的方向