本文链接:https://blog.csdn.net/feather_wch/article/details/131797308
1、使用方法一:Activity中通过内部类实现LifecycleObserver(kt中是inner class)
2、使用方法二:
3、LifecycleOwner是被观察者 => 用于标记具有生命周期的组件
4、Lifecycle是内部的生命周期对象 => 管理生命周期状态、派发生命周期事件
5、LifeCycleRegister => Lifecycle的具体实现类
6、ProcessLifecycleOwner => 监控整个App的生命周期
7、ProcessLifecycleOwnerInitializer => ContentProvider
8、ReportFragment:空白Fragment和Activity进行绑定
#ReportFragment
onActivityCreated()
->dispatchCreate(mProcessListener) => 通知到ProcessLifecycleOwner
->dispatch(EVENT.ON_CREATE)
#LifeCycleRegister
->getActivity().handleLifecycleEvent(event)
->State next = getStateAfter(event) // 获取下一步状态
->moveToState(next)
->mState=next
->sync()
->while()
->forwardPass()
->backwardPass()
#LifeCycleRegister.ObserverWithState
->dispatchEvent()
#LifecycleEventObserver
->dispatchEvent(lifecycleOwner, downEvent(observer.mState))
#ReflectiveGenericLifecycleObserver
->onStateChanged()
#ClassesInfoCache.CallbackInfo
->invokeCallbacks() // 反射调用
9、LifecycleEventObserver-接口,提供onStageChanged
10、ReflectiveGenericLifecycleObserver
11、ObserverWithState
12、ClassesInfoCache
Map<class<?>, CallbackInfo> mCallbackMap = new HashMap<>();
Map<class<?>, Boolean> mHashLifecycleMethods = new HashMap<>();
13、CallbackInfo
Map<Event, List> mCallbackMap = new HashMap<>();
// MethodReference内部是Method
14、addObserver流程
#LifeCycleRegister
addObserver(observer)
#ObserverWithState
->ObserverWithState(observer)
->Lifecycling.lifecycleEventObserver(observer)
->ReflectiveGenericLifecycleObser(observer)
->while() // 状态同步,避免错过之前的Event
->sync()
15、Lifecyling => 静态方法的辅助类,提供构造出
16、Lifecycle的状态机
【INITIALIZED】 --ON_CREATE--> 【CREATED】 --ON_START--> 【STARTED】 --ON_RESUME--> 【RESUMED】
【DESTORYED】 <--ON_DESTORY-- 【CREATED】 <--ON_STOP-- 【STARTED】 <--ON_PAUSE-- 【RESUMED】
// 事件和状态
LifecycleRegister#getStateAfter()
switch(state){
case ON_CREATE:
case ON_STOP:
return CREATED;
case ON_START:
case ON_PAUSE:
return CREATED;
case ON_RESUME:
return RESUMED;
case ON_DESTORY:
return DESTORYED;
}
17、LifecycleEventObserver、ReflectiveGenericLifecycleObserver、ObserverWithState采用了什么设计模式?
1、在onResume注册会怎么办?(不推荐)
onResume(){
addObserver(xxx);
}
CREATE->START->RESUME
LifecycleRegister中while()循环做状态同步
2、基本流程(onCreate)
Activity.onCreate->Fragment.onActivityCreated() -> 触发ON_CREATE事件
-> 进入CREATED状态(前进)-> 状态同步sync -> 观察者会调用CREATE注解方法
3、onStart()
onStart事件->进入STARTED状态->状态同步 调用START注解方法
4、为什么在ComponentActivity中写那么多逻辑代码,是为了降低耦合吗?
5、为什么需要状态机这么复杂?
6、onStop中注册会打印什么?
7、为什么会执行create/为什么在onCreate中addObserver还会收到ON_CREATE事件?