我已經遷移到莫斯比3.0.3,現在正在調查PresenterManager
的能力。 對於我來說,並沒有完全清楚主持人關於活動,片段和ViewGroup的一生。 我查看了ViewGroupMvpDelegateImpl
,FragmentMvpDelegateImpl
和ActivityMvpDelegateImpl
,並且無法100%確定演示者何時終止。莫斯比3主持人的生活 - MVP
至於我默認keepPresenterInstance
和keepPresenterOnBackstack
理解總是爲真,我們有這樣的情況:
片段的主持人存在,直到它的片段從堆棧中或整個過程被終止刪除。在這種情況下,我靠方法從
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或約從FragmentPagerAdapter(也在裏面另一個片段)片段?
活動和ViewGroup的演示者存在,直到他們的活動未完成或整個過程終止。在這種情況下,我靠方法從
ActivityMvpDelegateImpl
:static boolean retainPresenterInstance(boolean keepPresenterInstance, Activity activity) { return keepPresenterInstance && (activity.isChangingConfigurations() || !activity.isFinishing()); }
這是適用於所有ViewGroups,無論他們在哪裏居住?
問這個問題的原因是,在我們的應用程序中,我們有活動,片段,片段內的片段,自定義視圖組和所有人都有演示者。 這個想法是在detachView(final boolean retainInstance)
的發佈者處釋放大量資源,但在內存中保留一些輕量級的內容(如inMemory緩存),以便在從後臺堆棧恢復視圖時重用該資源。
同樣,我們使用Dagger2,瞭解何時釋放適當的子組件非常重要。
謝謝你這麼全面的答案。 在Mosby文檔中查看這些評論將很方便, –