gpt4 book ai didi

android - LifecycleRegistry 实例何时开始监听 LifecycleOwner 的生命周期变化?

转载 作者:行者123 更新时间:2023-11-29 14:30:05 44 4
gpt4 key购买 nike

我已经开始学习架构组件,但找不到任何东西。

LifecycleFragment只是创建一个新的 LifecycleRegistry对象,它不会开始观察 fragment 的生命周期。

我猜 LifecycleRegistry 对象开始监听 fragment 的生命周期,例如,当我们将其放入 LiveData.observe() 时作为第一个参数,但我没有在源代码中找到任何证据。

问题:LifecycleRegistry 何时以及如何执行对象开始观察 fragment 的生命周期并刷新 LifecycleRegistry.mState?

最佳答案

有一个名为 LifecycleRuntimeTrojanProviderContentProvider 已合并到应用程序的 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 是 FragmentActivityLifecycleDispatcher 调用 FragmentManager.registerFragmentLifecycleCallbacks获得 Activity fragment 生命周期事件的通知。如果 fragment 是 LifecycleRegistryOwner,它将 onFragmentCreatedonFragmentStartedonFragmentResumed 回调中继到 LifecycleRegistry ,和之前一样。

onFragmentPausedonFragmentStoppedonFragmentDestroyed 回调在 fragment 上调用相应的回调之后调用,但是 LifecycleObserver 之前必须调用回调。因此,无论何时创建 fragment ,LifecycleDispatcher 都会将 LifecycleDispatcher.DestructionReportFragment 的实例注入(inject)其中。 DestructionReportFragment 的生命周期回调用于更新暂停、停止和销毁事件的注册表。

我无法链接到代码,因为它尚未发布,但您可以在将库添加到项目后在 Android Studio 中浏览它。

关于android - LifecycleRegistry 实例何时开始监听 LifecycleOwner 的生命周期变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44594919/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com