作者:水_-晶_522 | 来源:互联网 | 2023-02-01 08:18
我已经开始学习架构组件,但是找不到一件事。
LifecycleFragment仅创建一个新的LifecycleRegistry对象,该对象不会开始观察该片段的生命周期。
我猜想,例如,当我们将LifecycleRegistry对象作为第一参数放入LiveData.observe()时,LifecycleRegistry对象就开始监听该片段的生命周期,但是我在源代码中找不到任何证明。
问题:LifecycleRegistry对象何时以及如何开始观察片段的生命周期并刷新LifecycleRegistry.mState
?
1> Samuel Peter..:
有一种ContentProvider
被称为LifecycleRuntimeTrojanProvider
被合并到应用程序的AndroidManifest.xml
。在其onCreate
方法中,它初始化了一个称为的单例LifecycleDispatcher
,该单例负责更新所有LifecycleRegistry
实例。
LifecycleDispatcher
使用自API 14以来一直存在的Application.registerActivityLifecycleCallbacks方法来在创建新活动时获得通知。此时,它会将实例ReportFragment
插入到活动中。在ReportFragment
使用Fragment
生命周期回调更新活动的LifecycleRegistry
如果需要的话,就像这样:
@Override
public void onStop() { // Showing onStop as example
super.onStop();
dispatch(Lifecycle.Event.ON_STOP);
}
private void dispatch(Lifecycle.Event event) {
if (getActivity() instanceof LifecycleRegistryOwner) {
((LifecycleRegistryOwner) getActivity()).getLifecycle().handleLifecycleEvent(event);
}
}
如果新活动是FragmentActivity
,则LifecycleDispatcher
调用FragmentManager.registerFragmentLifecycleCallbacks以获取活动的片段生命周期事件的通知。如果片段为a ,它将中继onFragmentCreated
,onFragmentStarted
和onFragmentResumed
回调到,方法与之前相同。LifecycleRegistry
LifecycleRegistryOwner
的onFragmentPaused
,onFragmentStopped
和onFragmentDestroyed
回调被称为相应的回调呼吁片段之后,但在LifecycleObserver
回调前必须调用。因此,无论何时创建片段,都会向其中LifecycleDispatcher
注入一个实例LifecycleDispatcher.DestructionReportFragment
。该DestructionReportFragment
的生命周期回调被用于更新暂停,停止注册表和破坏事件。
我无法链接到该代码,因为它尚未发布,但是将库添加到项目后,您可以在Android Studio中浏览它。