Android 后堆栈中有大量碎片的内存问题

Android 后堆栈中有大量碎片的内存问题,android,android-fragments,Android,Android Fragments,我有一个活动,用户可以从一个片段进展到另一个片段。片段启动、下载一些数据并显示(以及从参考资料中绘制一些图标等)。用户可以继续在片段中前进,只要他们愿意(直到他们感到厌烦?) 问题是,OutOfMemoryError最终会发生(在32mb vm堆上大约90个片段之后)。90看起来确实很多,但我在现场看到过这样的内存错误报告,所以在低端设备上可能会发生这种情况。 我已确保在onCreateView中创建的任何视图在onDestroyView中均为空。我的片段所保存的唯一其他对象(据我所知)是它开始

我有一个活动,用户可以从一个片段进展到另一个片段。片段启动、下载一些数据并显示(以及从参考资料中绘制一些图标等)。用户可以继续在片段中前进,只要他们愿意(直到他们感到厌烦?)

问题是,OutOfMemoryError最终会发生(在32mb vm堆上大约90个片段之后)。90看起来确实很多,但我在现场看到过这样的内存错误报告,所以在低端设备上可能会发生这种情况。 我已确保在onCreateView中创建的任何视图在onDestroyView中均为空。我的片段所保存的唯一其他对象(据我所知)是它开始下载的数据,通常只有10-50kb

我的第一个问题是,这正常吗?我是否可以期望“仅”能够在后堆栈中包含约90个碎片?或者我有内存泄漏的地方,我可以做些什么

如果用户离开了我的应用程序,Android决定终止整个进程以释放内存,那么当用户返回时,使用的内存会少得多,因为整个状态已从捆绑包中恢复。如果用户随后在后台堆栈中按back键,则当然会从savedinstancestate创建/恢复每个片段


所以我的第二个问题是,有没有办法迫使这种情况发生?也就是说,“如果后堆栈中有>50个片段,开始杀死底部的片段以保存静态状态?”

标记中的
AndroidManifest.xml
中尝试以下操作:

android:largeHeap="true"

并提供您的代码以提供更多帮助。

所有后台堆栈片段都用硬引用保存在内存中。所以,如果您在后堆栈中保留了大量的片段,那么您的内存就会用完


看看这里:

这是一个可怕的建议——而且只是人为地扩展了你可以放入的碎片数量——这个问题仍然存在。谷歌明确表示,不要用这个来解决内存泄漏问题。