如何避免android中的createBitmap()崩溃

时间:2011-10-19 15:00:32

标签: android memory bitmap

我在多个地方使用createBitmap()。有时这个api会抛出OutOfMemoryError()异常。如何避免这种异常?

我正在使用如下,

createBitamp(width, height, Config.ARGB_8888);

width = width屏幕

height = height屏幕

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:6)

我已在以下Android问题故障单中发布了有关如何处理位图的一些信息。它可能对您有所帮助:http://code.google.com/p/android/issues/detail?id=8488#c80

答案 1 :(得分:5)

许多人面临这个问题。您有三种方法可以解决问题:

  • 增加可用内存:停止服务或将设备更改为新设备
  • 减少内存使用量:通过优化代码
  • [更新]释放未使用的位图内存:调用recycle()
  • [更新]不要使用GarbageCollector:)

通常有了Bitmap问题,垃圾收集器会有所帮助。

Justin Breitfeller回复links对Bitmap内部工作原理的更详细解释。要带走的消息是为位图数据分配的内存(在本机createBitmap方法中)被稍微分开处理,并且当Bitmap变为可垃圾收集时,GarbageCollector不会直接释放它。真正的解决方案是在不使用它们时回收()您的位图。这仍将保留为Bitmap对象分配的(小)内存,但标记为位图数据分配的(大)内存可收集垃圾。因此GarbageCollector反过来会释放两者,但你不必手动调用它,在OutOfMemory发生之前,JVM将尝试GarbageCollect。