我们的应用程序使用了很多位图。例如,它在 G1、XOOM 上运行良好。但在 HTC Desire 上出现 OutOfMemory 错误。在代码中,我们使用 try/catch(OutOfMemoryError e) 并且所有设备(Desire 除外)都会抛出异常,但 HTC 只是在没有 OOM 异常的情况下终止应用程序。我们将位图的内存限制为 12 Mb,看来此解决方案解决了问题,但客户在 HTC Desire HD 上仍然存在问题。即使有 12 Mb 的限制,也会有 OOM。以下是日志:
06-07 12:03:43.978 E/dalvikvm-heap( 29616):1140128-byte external allocation too large for this process.
06-07 12:03:43.978 E/dalvikvm( 29616):Out of memory: Heap Size=12311KB, Allocated=9420KB, Bitmap Size=12139KB, Limit=21884KB
06-07 12:03:43.978 E/dalvikvm( 29616):Trim info: Footprint=15751KB, Allowed Footprint=15751KB, Trimmed=3440KB
06-07 12:03:43.978 E/GraphicsJNI( 29616):VM won't let us allocate 1140128 bytes
AFAIK 对设备有不同的堆大小限制(G1:16mb,Droid:24mb,Xoom 48mb)。在我看来,系统应该至少提供 16 mb,但我们有 12mb 的 OOM。我的问题是:如何找出可用于 Android 2.* 位图的可用堆大小?或者请建议如何以其他方式避免此类问题。仅供参考,我们不能使用更少的位图,尤其是当它在其他设备上运行良好时。提前感谢您的帮助!