我们的应用程序使用了很多位图。它工作得很好,例如在g1,xoom上。但宏达电的愿望是有一个内存不足的错误。在代码中,我们使用try/catch(outofmemoryerror)和所有设备(除了desire)抛出异常,但htc只是在没有oom异常的情况下终止应用程序。我们将位图的内存限制为12MB,似乎这个解决方案解决了这个问题,但是客户在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,xoom48mb)。我认为系统应该至少提供16MB,但我们有12MB的OOM。我的问题是:如何找出android 2的bitmap有多少可用堆大小。*?或者请建议如何以其他方式避免此类问题。仅供参考,我们不能使用更少的位图,特别是当它在其他设备上运行良好时。提前感谢您的帮助!
最佳答案
你可以试试
Runtime.getRuntime().maxMemory();
或活动方法
getMemoryInfo(ActivityManager.MemoryInfo;
此外,您可以覆盖活动的
onLowMemory();
方法,在该方法中,您可以在关闭之前处理当活动get被通知内存问题时将发生的事情。您还应该在android/linux内存上的android开发人员中检查这个answer。