【发布时间】:2017-05-11 17:48:25
【问题描述】:
我已迁移到 Mosby 3.0.3,现在正在研究 PresenterManager 的功能。
对我来说,关于 Activity、Fragment 和 ViewGroup 的演示者的生命周期并不完全清楚。
我查看了 ViewGroupMvpDelegateImpl、FragmentMvpDelegateImpl 和 ActivityMvpDelegateImpl 并不能 100% 确定演示者何时终止。
据我了解,默认情况下keepPresenterInstance 和keepPresenterOnBackstack 总是正确的,我们有这样的情况:
-
Fragment 的 Presenter 一直存在,直到它的 Fragment 从 backstack 中移除或整个进程终止。在这种情况下,我依赖
FragmentMvpDelegateImpl中的方法:protected boolean retainPresenterInstance() { Activity activity = getActivity(); if (activity.isChangingConfigurations()) { return keepPresenterInstanceDuringScreenOrientationChanges; } if (activity.isFinishing()) { return false; } if (keepPresenterOnBackstack && BackstackAccessor.isFragmentOnBackStack(fragment)) { return true; } return !fragment.isRemoving(); }
但是 childFragmentManagers 中的 Fragment 或 FragmentPagerAdapter 中的 Fragment(也在另一个 Fragment 中)呢?
-
Activity 和 ViewGroup 的 Presenter 一直存在,直到他们的 Activity 未完成或整个过程终止。在这种情况下,我依赖
ActivityMvpDelegateImpl的方法:static boolean retainPresenterInstance(boolean keepPresenterInstance, Activity activity) { return keepPresenterInstance && (activity.isChangingConfigurations() || !activity.isFinishing()); }
对于所有 ViewGroup 是否都是如此,无论它们位于何处?
问这样的问题的原因是在我们的应用程序中,我们有活动、片段、片段内的片段、自定义视图组,它们都有演示者。
我们的想法是在 detachView(final boolean retainInstance) 的 Presenter 中释放大量资源,但在内存中保留一些轻量级的资源 - 例如 inMemory 缓存,以便在从后台堆栈恢复视图时重用它。
同样我们使用 Dagger2,了解何时发布适当的子组件很重要。
【问题讨论】: