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

如何避免android中的createBitmap()崩溃,android,memory,bitmap,Android,Memory,Bitmap,我在多个地方使用createBitmap()。有时此api会引发OutOfMemoryError()异常。如何避免这种例外 我正在使用下面的方法 createBitamp(width, height, Config.ARGB_8888); width=屏幕的宽度 height=屏幕的高度 任何帮助都将不胜感激。许多人面临这个问题。有三种方法可以解决这个问题: 增加可用内存:停止服务,或将设备更改为较新的设备 减少内存使用:通过优化代码 [更新]释放未使用的位图内存:调用 [更新]不要使用垃圾

我在多个地方使用
createBitmap()
。有时此api会引发
OutOfMemoryError()
异常。如何避免这种例外

我正在使用下面的方法

createBitamp(width, height, Config.ARGB_8888);
width=屏幕的宽度

height=屏幕的高度


任何帮助都将不胜感激。

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

  • 增加可用内存:停止服务,或将设备更改为较新的设备
  • 减少内存使用:通过优化代码
  • [更新]释放未使用的位图内存:调用
  • [更新]不要使用垃圾收集器:)
通常对于位图问题,垃圾收集器会有所帮助


Justin Breitfeller对位图内部工作原理的更详细解释的回应。要带走的消息是,分配给位图数据的内存(在本机createBitmap方法中)在某种程度上是分开处理的,当位图变成垃圾回收时,垃圾收集器不会直接释放内存。真正的解决方案是在不使用位图时循环使用它们。这仍将保留为位图对象分配的(小)内存,但将为位图数据分配的(大)内存标记为可垃圾回收。因此,GarbageCollector反过来会释放这两种内存,但您不必手动调用它,在OutOfMemory发生之前,JVM将尝试以任何方式进行GarbageCollect。

我已经发布了一些关于在以下Android发行单中如何处理位图的信息。这可能会对你有所帮助:

阅读这篇博文