LifecycleComponents问答
为什么不直接使用ActivityLifecycleCallbacks
而是使用一个non-UI fragment ReportFragment
?
因为在”创建”生命周期方法中(onCreate
,onStart
),ActivityLifecycleCallbacks
中方法调用是在Activity
的生命周期方法之前。在”销毁”生命周期方法中(onStop
,onDestroy
),ActivityLifecycleCallbacks
中方法调用是在Activity
的生命周期方法之后。正常去订阅这里的生命周期,例如
|
|
更多的希望是在Activity
的onCreate
执行完成之后,而订阅Lifecycle.Event.ON_DESTROY
则更希望在Activity
的onDestroy
之前。所有在ActivityLifecycleCallbacks
中直接分发生命周期是不合适的。还要注意一下,在注册ReportFragment
时候使用的是manager.executePendingTransactions();
而不是常见的commit
,是为了马上执行,更准确的去分发生命周期。通过这种方式,最终的生命周期类似
|
|
上面是在LifecycleActivity
中使用getLifecycle().addObserver
的生命周期分发走向。
同理,在LifecycleFragment
中getLifecycle().addObserver
时, FragmentCallback
和DestructionReportFragment
也是完成类似上面ActivityLifecycleCallbacks
和ReportFragment
的工作。总结就是将LifecycleObserver
的生命周期进一步限制在跟踪的LifecycleRegistryOwner
生命周期范围之内。
ProcessLifecycleOwner
的作用?
在LifecycleRuntimeTrojanProvider
中有两个类进行了初始化,
|
|
第一个是为每个组件进行生命周期分发,例如Activity
,Fragment
。ProcessLifecycleOwner
则是为整个app进程的生命周期进行分发,例如使用ProcessLifecycleOwner.get().getLifecycle().addObserver();
就可以监控整个进程的生命周期。注意一点,在销毁时,最多只会分发到ON_STOP
,而没有ON_DESTROY
事件。
更多分析可以看这篇 Lifecycle-aware Components 源码分析