LifecycleRegistry实例何时开始侦听LifecycleOwner的生命周期更改?

Ove*_*vel 1 android android-lifecycle android-architecture-lifecycle

我已经开始学习架构组件,但是找不到一件事。

LifecycleFragment仅创建一个新的LifecycleRegistry对象,该对象不会开始观察该片段的生命周期。

我猜想,例如,当我们将LifecycleRegistry对象作为第一参数放入LiveData.observe()时,LifecycleRegistry对象就开始监听该片段的生命周期,但是我在源代码中找不到任何证明。

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

Sam*_*ter 6

有一种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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果新活动是FragmentActivity,则LifecycleDispatcher调用FragmentManager.registerFragmentLifecycleCallbacks以获取活动的片段生命周期事件的通知。如果片段为a ,它将中继onFragmentCreatedonFragmentStartedonFragmentResumed回调到,方法与之前相同。LifecycleRegistryLifecycleRegistryOwner

onFragmentPausedonFragmentStoppedonFragmentDestroyed回调被称为相应的回调呼吁片段之后,但在LifecycleObserver回调前必须调用。因此,无论何时创建片段,都会向其中LifecycleDispatcher注入一个实例LifecycleDispatcher.DestructionReportFragment。该DestructionReportFragment的生命周期回调被用于更新暂停,停止注册表和破坏事件。

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