gpt4 book ai didi

android - 对 UI fragment 中保留 fragment 的引用。旋转屏幕后,UI fragment 如何从内存中删除?

转载 作者:行者123 更新时间:2023-11-30 00:43:08 24 4
gpt4 key购买 nike

我正在阅读 FragmentRetainInstance sample.UiFragment中有变量RetainedFragment mWorkFragment。那么如何在旋转屏幕后从内存中删除 UiFragment 呢?据我所知,mWorkFragment 是对在屏幕旋转和其他配置更改后仍然存在的内容的引用。

更新 #1

我旋转屏幕并按下 Initiate GC,然后按下 Dump heap。我看到 UiFragment 实例的数量是 1。为什么?我希望看到 2:当前方向为 1,之前方向为 1。

启动 GC:

enter image description here

堆转储:

enter image description here

最佳答案

正如我在评论中所说,您链接到的示例中的 UiFragment 没有泄露。它确实包含对 RetainedFragment 的引用,该引用在配置更改后仍然存在,但该引用无关紧要。 GC 将从 GC root 开始,然后从那里遍历它在对象中找到的引用之后的对象。由于 UiFragment 不是从存在的对象(如 RetainedFragment)中引用的,因此它将在 Activity 对象的层次结构之外,并且有资格进行垃圾回收。

如果您想查看内存泄漏,请在链接到的示例中,从 RetainedFragment 的 onDetach() 回调中删除行 mProgressBar = null;。通过此更改,RetainedFragment 将保留对 UiFragment 的引用(实际上是旧 Activity 及其所有数据),使旧 Context 实例保持 Activity 状态,至少直到 RetainedFragment 的 onActivityCreated() 回调被调用(在 onActivityCreated 内部() mProgressBar 将被清除并指向恢复的 UiFragment 的 ProgressBar)。

关于android - 对 UI fragment 中保留 fragment 的引用。旋转屏幕后,UI fragment 如何从内存中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42233601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com