6

我有一个活动,用户可以从一个片段前进到另一个片段。片段开始,下载一些数据并显示它(以及从资源中绘制一些图标等)。用户可以继续在片段中前进,只要他们喜欢(直到他们感到无聊?)。

问题是,OutOfMemoryError 最终会发生(在 32mb 虚拟机堆上大约 90 个片段之后)。90 看起来确实不少,但我在现场看到过这样的内存错误报告,所以这可能在低端设备上发生得更早。我确保我在 onCreateView 中创建的任何视图都在 onDestroyView 中无效。我的片段唯一拥有的其他对象(据我所知)是它在开始时下载的数据,通常只有 10-50kb。

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

如果用户离开我的应用程序,并且 Android 决定终止整个进程以释放内存,那么当用户返回时,使用的内存会少得多,因为整个状态已经从包中恢复。如果用户随后通过返回堆栈进行后按,则每个片段当然会从已保存的实例状态中创建/恢复。

所以我的第二个问题是,有没有办法强迫这种情况发生?即,'如果后堆栈中有 >50 个片段,则开始将底部的片段杀死以保存到已保存实例状态?

4

2 回答 2

1

所有回栈 Fragment 都通过硬引用保存在内存中。因此,如果您在后台堆栈中保留大量的 Fragments,那么您将内存不足。

看看这里:当 Fragment 被替换并放入后堆栈(或删除)时,它是否保留在内存中?

于 2013-07-31T21:46:02.307 回答
-6

AndroidManifest.xml在你的<Application>标签中试试这个:

android:largeHeap="true"

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

于 2012-12-19T05:24:59.190 回答