我有一个活动,用户可以从一个片段前进到另一个片段。片段开始,下载一些数据并显示它(以及从资源中绘制一些图标等)。用户可以继续在片段中前进,只要他们喜欢(直到他们感到无聊?)。
问题是,OutOfMemoryError 最终会发生(在 32mb 虚拟机堆上大约 90 个片段之后)。90 看起来确实不少,但我在现场看到过这样的内存错误报告,所以这可能在低端设备上发生得更早。我确保我在 onCreateView 中创建的任何视图都在 onDestroyView 中无效。我的片段唯一拥有的其他对象(据我所知)是它在开始时下载的数据,通常只有 10-50kb。
我的第一个问题是,这正常吗?我可以期望“仅”能够在后堆栈中有大约 90 个片段吗?或者我在某个地方有内存泄漏,我可以做些什么?
如果用户离开我的应用程序,并且 Android 决定终止整个进程以释放内存,那么当用户返回时,使用的内存会少得多,因为整个状态已经从包中恢复。如果用户随后通过返回堆栈进行后按,则每个片段当然会从已保存的实例状态中创建/恢复。
所以我的第二个问题是,有没有办法强迫这种情况发生?即,'如果后堆栈中有 >50 个片段,则开始将底部的片段杀死以保存到已保存实例状态?