弹出后堆栈后,我的片段没有被垃圾收集
After popping the backstack, my Fragments are not being garbage collected
弹出后台堆栈后,我的 Fragments 没有被垃圾回收?他们的 onStop()
方法被调用,而不是他们的 onDestroyView()
或 onDestroy()
方法。
如何确保他们的 onDestory()
方法被调用?
我犯了一个错误,将 "God Activity" 和我所有的片段 .replace()
放在一个容器 FrameLayout
中。假设我有四个片段,FragA
、FragB
、FragC
和 FragD
,其后堆栈看起来像这样:
FragA
-> FragB
-> FragC
-> FragD
FragD is the only visible fragment. Then, I call .
popBackstack()`
FragA
-> FragB
-> FragC
=!= FragD
FragD
已分离,FragC
现在对用户可见。当尝试实例化一个新的 FragD
(来自 FragC
)时,它被创建,并且在我的堆上有两个 FragD
的实例。并且第一个 FragD
实例的 onDestroyView()
没有被调用。
我该如何解决这个问题?
编辑:这是我当前如何替换 UI:
中的片段的示例
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new SearchScreenFragment())
.addToBackStack(null)
.commit();
EDIT2:onDetach()
也没有被调用。
我应该一直在使用这个:getChildFragmentManager()
:
来自
弹出后台堆栈后,我的 Fragments 没有被垃圾回收?他们的 onStop()
方法被调用,而不是他们的 onDestroyView()
或 onDestroy()
方法。
如何确保他们的 onDestory()
方法被调用?
我犯了一个错误,将 "God Activity" 和我所有的片段 .replace()
放在一个容器 FrameLayout
中。假设我有四个片段,FragA
、FragB
、FragC
和 FragD
,其后堆栈看起来像这样:
FragA
-> FragB
-> FragC
-> FragD
FragD is the only visible fragment. Then, I call .
popBackstack()`
FragA
-> FragB
-> FragC
=!= FragD
FragD
已分离,FragC
现在对用户可见。当尝试实例化一个新的 FragD
(来自 FragC
)时,它被创建,并且在我的堆上有两个 FragD
的实例。并且第一个 FragD
实例的 onDestroyView()
没有被调用。
我该如何解决这个问题?
编辑:这是我当前如何替换 UI:
中的片段的示例getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new SearchScreenFragment())
.addToBackStack(null)
.commit();
EDIT2:onDetach()
也没有被调用。
我应该一直在使用这个:getChildFragmentManager()
:
来自