内存在后端堆栈中出现大量碎片

roc*_*cko 6 android android-fragments

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

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

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

如果用户离开我的应用程序,并且Android决定终止整个进程以释放内存,那么当用户返回使用的内存时,由于整个状态已从bundle恢复,因此更少.如果用户然后反向通过后栈,那么当然每个片段都是从savedinstancestate创建/恢复的.

所以我的第二个问题是,有没有办法强迫这种情况发生?即,'如果后面的堆栈中有> 50个碎片,那么开始杀死底部的碎片到savedInstanceState?'

Hos*_*BAR -6

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

android:largeHeap="true"
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个可怕的建议——而且只是人为地延长了你可以装入的碎片数量——这个问题仍然存在。谷歌明确表示不要使用它来解决内存泄漏问题。 (3认同)