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

标签 android android-lifecycle android-architecture-lifecycle

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

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/

相关文章:

安卓应用生命周期

android - ViewPager fragment 中的 onPause() 不起作用

android - 如何在 Android 中保存和恢复 lambda?

java - Android模块和代码组织

android - 当用户滑开时前台服务被杀死

Android 架构组件生命周期状态

android - 为什么我得到 "Multiple dex files define Landroid/support/v7/recyclerview/extensions/ListAdapter"

android - 有没有办法使用 Android 的 LifecycleObserver 来通知 onActivityResult?

android - 重启后启动 Intent

android - CoordinatorLayout 推送的 Actionbar