gpt4 book ai didi

android - FragmentStatePagerAdapter 内存泄漏(带有 viewpager 的嵌套 fragment )

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:31 25 4
gpt4 key购买 nike

我的适配器出现“内存泄漏”(引号将在稍后解释)。我目前正在使用嵌套 fragment 来托管 viewpager。

我的设置如下:
1. Activity (承载 fragment A的空 Activity )
2. fragment A - 使用 Fragmentstatepageradapter 托管 viewpager 的 fragment 。每个 viewpager 页面都托管 fragment B。
3. fragment B - 包含 ImageView 的 fragment 。

一切正常,除非发生配置更改。监控堆,每次旋转时它似乎都会增长 100 kb。手动 GCing 不会释放内存。

我尝试过的事情:
1. 将 fragment B 替换为空白 fragment - 出现同样的问题,因此导致问题的不是 ImageView 。
2. 删除 fragment A 和 B 并旋转 Activity 。没有发生内存泄漏,所以不是 Activity。
3. 在任何方向改变之前和旋转约 50 次后使用 MAT 堆起来。 MAT 显示 1 个主要嫌疑人,这是我的适配器类。它显示了 7MB 的观察者保留堆(非常小的浅堆),如下所示:

array java.util.ArrayList @ 0x42079938 24 7,000,832 
.\mObservers android.database.DataSetObservable @ 0x42053508 16 7,000,848
..\mObservable com.example.main.Adapter@ 0x4205a048 40 7,001,416

为什么我在 fragment 中使用 viewpager:
1. 我想通过设置 setretaininstance(true) 来保持适配器的状态和其他与 viewpager 相关的变量。
2. 配置更改后,我没有重新创建适配器,而是使用旧适配器附加到 viewpager。
3. 如果我不重用旧适配器而是在配置更改后创建一个新适配器,内存泄漏就会消失。
4. 关闭 Activity 并返回上一个 Activity 后,内存泄漏也消失了。

有什么想法吗?非常感谢任何帮助。

谢谢,JC

最佳答案

我有一个类似的内存泄漏,现在已经解决了。

在我相应的 Fragment A 中,我使用 this.getFragmentManager() 而不是 this.getChildFragmentManager() 实例化了 FragmentStatePagerAdapter> 因为嵌套 fragment 就位。

如果这也解决了您的问题,请告诉我。

关于android - FragmentStatePagerAdapter 内存泄漏(带有 viewpager 的嵌套 fragment ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20837745/

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