我已经开始学习架构组件,但找不到任何东西。
LifecycleFragment只是创建一个新的 LifecycleRegistry对象,它不会开始观察 fragment 的生命周期。
我猜 LifecycleRegistry 对象开始监听 fragment 的生命周期,例如,当我们将其放入 LiveData.observe() 时作为第一个参数,但我没有在源代码中找到任何证据。
问题:LifecycleRegistry 何时以及如何执行对象开始观察 fragment 的生命周期并刷新 LifecycleRegistry.mState
?
最佳答案
有一个名为 LifecycleRuntimeTrojanProvider
的 ContentProvider
已合并到应用程序的 AndroidManifest.xml
中。在其 onCreate
方法中,它初始化一个名为 LifecycleDispatcher
的单例,它负责更新所有 LifecycleRegistry
实例。
LifecycleDispatcher
使用 Application.registerActivityLifecycleCallbacks自 API 14 以来一直存在的方法,用于在创建新 Activity 时收到通知。此时它将 ReportFragment
的实例注入(inject)到 Activity 中。 ReportFragment
使用 Fragment
生命周期回调在必要时更新 Activity 的 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);
}
}
如果新 Activity 是 FragmentActivity
,LifecycleDispatcher
调用 FragmentManager.registerFragmentLifecycleCallbacks获得 Activity fragment 生命周期事件的通知。如果 fragment 是 LifecycleRegistryOwner,它将
,和之前一样。onFragmentCreated
、onFragmentStarted
和 onFragmentResumed
回调中继到 LifecycleRegistry
onFragmentPaused
、onFragmentStopped
和 onFragmentDestroyed
回调在 fragment 上调用相应的回调之后调用,但是 LifecycleObserver
之前必须调用回调。因此,无论何时创建 fragment ,LifecycleDispatcher
都会将 LifecycleDispatcher.DestructionReportFragment
的实例注入(inject)其中。 DestructionReportFragment
的生命周期回调用于更新暂停、停止和销毁事件的注册表。
我无法链接到代码,因为它尚未发布,但您可以在将库添加到项目后在 Android Studio 中浏览它。
关于android - LifecycleRegistry 实例何时开始监听 LifecycleOwner 的生命周期变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44594919/