我的适配器中存在“内存泄漏”问题(稍后将解释引号的含义)。我目前使用嵌套片段来托管视图页面。
我的设置如下:
1. 活动(空活动,托管 Fragment A)
2. Fragment A - 托管带有 Fragmentstatepageradapter 的视图页面的片段。每个视图页面都托管片段 B。
3. Fragment B - 包含 ImageView 的片段。
一切都很好,只是当发生配置更改时出现问题。监控堆,似乎每次旋转时都会增长 100 kb。手动进行垃圾回收不会释放内存。
我尝试过的事情:
1. 用空白片段替换 Fragment B - 发生相同的问题,因此不是 ImageView 导致的问题。
2. 删除 Fragment A 和 B 并旋转活动。不会出现内存泄露,因此不是活动的问题。
3. 在任何方向更改之前和旋转约 50 次后使用 MAT 来获取堆。MAT 显示一个主要的嫌疑犯,即我的适配器类。它显示了保留堆的 7MB(非常小的浅堆)的 observers,如下所示:
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. 当我关闭活动并返回前一个活动后,内存泄漏问题也会消失。
有任何想法吗? 感谢任何帮助。
谢谢, JC