JC.*_*JC. 10 android memory-leaks android-viewpager fragmentstatepageradapter
我的适配器中有"内存泄漏"(引用将在后面解释).我目前正在使用嵌套片段来托管viewpager.
我的设置如下:
1.活动(托管片段A的空活动)
2.片段A - 使用Fragmentstatepageradapter托管viewpager的片段.每个viewpager页面都包含片段B.
3.片段B - 包含imageview的片段.
除非发生配置更改,否则一切都很好.监控堆,每次轮换发生时,它似乎增长100 kb.手动GCing不会释放内存.
我尝试过的事情:
1.用空白片段替换片段B - 出现同样的问题,因此不是造成问题的imageview.
2.删除片段A和B并旋转活动.没有发生内存泄漏,所以它不是活动.
3.在任何方向改变之前使用MAT并且在旋转大约50次之后使用MAT以使堆积起来.MAT显示了一个主要的嫌疑人,这是我的适配器类.它显示了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
Run Code Online (Sandbox Code Playgroud)
为什么我在片段中使用viewpager:
1.我想通过设置setretaininstance(true)来保持适配器的状态以及与viewpager相关的其他变量.
2.配置更改后,我不重新创建适配器,而是使用旧的适配器连接到viewpager.
3.如果我不重用旧适配器但在配置更改后创建新适配器,则内存泄漏消失.
4.关闭活动并返回上一个活动后,内存泄漏也消失了.
有任何想法吗?非常感谢任何帮助.
谢谢,JC
小智 32
我有一个类似的内存泄漏现在已经解决.
在我的对应片段A,我被实例化FragmentStatePagerAdapter与this.getFragmentManager()代替的this.getChildFragmentManager(),因为嵌套片段到位.
如果这也解决了您的问题,请与我们联系.