2012-12-19 33 views
5

我有一个活动,用户可以从一个碎片进展到另一个碎片。片段开始,下载一些数据并显示它(以及从资源中绘制一些图标等)。用户可以继续前进通过片段,只要他们喜欢(直到他们感到无聊?)。背堆栈中大量碎片的内存问题

问题是,一个OutOfMemoryError最终会发生(在一个32MB虚拟机堆上大约90个碎片之后)。 90看起来好像很多,但是我已经看到了这个领域的内存错误报告,所以很可能这种情况发生在较低端的设备上。 我确信任何在onCreateView中创建的视图我在onDestroyView中取消。我的片段中唯一存在的其他对象(据我所知)就是它在开始时下载的数据,通常只有10-50kb。

我的第一个问题是,这是正常的吗?我能期望'只'能够在后面堆叠中有~90个碎片吗?或者我有一处内存泄漏,我可以做些什么?

如果用户离开我的应用程序,并且Android决定杀死整个进程以释放内存,那么当用户返回所使用的内存远远少于整个状态时,因为整个状态已从捆绑恢复。如果用户通过后退堆栈进行反压,那么每个片段当然会从savedinstancestate创建/恢复。

所以我的第二个问题是,有没有办法强制这种情况发生?也就是说,'如果背堆栈中有> 50个碎片,开始将底部的碎片杀死到savedInstanceState?'

回答

-6

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

android:largeHeap="true" 

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

+3

这是可怕的建议 - 只有人为地延长你能多少碎片装在 - 这个问题仍然存在。谷歌明确表示不使用这个来解决内存泄漏问题。 –