【发布时间】:2012-03-28 09:28:54
【问题描述】:
首先,感谢您花时间查看我的问题。我目前在我正在开发的应用程序中遇到内存峰值问题。
我的目的是能够下载和处理大量 HTML 数据,目前的原因是嵌套在 HTML 中的大型 base64 编码图像,我理解这不适合在移动平台上使用。作为记录,我目前正在三星 Galaxy S 上进行测试。此外,由于每个应用程序分配了更多内存,因此在 Galaxy Nexus 上不会发生此问题。
我的问题是,在处理大约 2.8mb 的大量 HTML 数据时,内存堆增加到大约 27-29mb,但分配的内存从未超过 18-19mb。当 HTML 被处理、保存和显示后,分配的内存恢复到 3-4mb 左右。如果我要再次下载并处理这个 HTML,这个过程会重复,我得到相同的内存使用,除了它似乎进一步增加堆(这对我来说似乎没有必要),在此时我收到Out of memory 错误。
当我收到此错误时,通常是在使用 HttpGet 下载 HTML 或使用 StringBuffer 从磁盘提取数据时。有时它是由 XML 膨胀期间的 Bitmap 引起的。
任何帮助将不胜感激。
【问题讨论】:
-
Galaxy S 运行的是 2.3,对吧?因此,您将姜饼与 ICS 进行比较。您应该尽可能在解析后尝试清理......
-
感谢您的回复。 Galaxy S 是 2.3.6。我正在尽可能多地清理,我只是好奇为什么分配的内存从不超过 18mb,但它仍然试图扩展堆......
-
请发布为垃圾收集和失败的最终分配生成的 LogCat 输出。