android-LifecycleRegistry实例何时开始侦听LifecycleOwner的生命周期更改?
作者:互联网
我已经开始学习架构组件,但是找不到一件事.
LifecycleFragment只是创建一个新的LifecycleRegistry对象,该对象不会开始观察该片段的生命周期.
我猜想,例如,当我们将其放入LiveData.observe()作为第一个参数时,LifecycleRegistry对象开始监听该片段的生命周期,但是我在源代码中找不到任何证明.
问题:LifecycleRegistry对象何时以及如何开始观察片段的生命周期并刷新LifecycleRegistry.mState?
解决方法:
有一个称为LifecycleRuntimeTrojanProvider的ContentProvider,它已合并到应用程序的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以获取有关活动的片段生命周期事件的通知.如果片段是LifecycleRegistryOwner,则它将片段中继到LifecycleRegistry的onFragmentCreated,onFragmentStarted和onFragmentResumed回调,方法与之前相同.
在片段上调用了相应的回调之后,将调用onFragmentPaused,onFragmentStopped和onFragmentDestroyed回调,但是必须在之前调用LifecycleObserver回调.因此,无论何时创建片段,LifecycleDispatcher都会将LifecycleDispatcher.DestructionReportFragment实例注入其中. DestructionReportFragment的生命周期回调用于更新注册表的暂停,停止和销毁事件.
我无法链接到该代码,因为它尚未发布,但是将库添加到项目后,您可以在Android Studio中浏览它.
标签:android,android-lifecycle,android-architecture-lifecycle 来源: https://codeday.me/bug/20191009/1878212.html