Canvas.drawBitmap()并释放内存

时间:2015-06-10 14:05:45

标签: java android canvas bitmap

我有ListView,列表中的项目是自定义ViewView类有一个字段

private Bitmap bitmap;

onDraw的{​​{1}}方法使用

View

问题在于我正在考虑canvas.drawBitmap(bitmap, matrix, paint); 。我想要做的是当项目滚出屏幕时释放与OutOfMemoryError相关联的内存。我以为我可以写Bitmap以允许垃圾收集器使用bitmap = null,但我担心Bitmap可能意味着这不起作用。 canvas.drawBitmap是否保留对canvas.drawBitmap的引用?或者调用Bitmap是否意味着canvas.drawBitmap对象本身具有与Canvas一样多的内存?麻烦的是我真的不明白Bitmap是什么,以及各种Canvas调用实际上做了什么。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

  

如果您在应用中显示大量位图数据,那么就是   可能会遇到OutOfMemoryError错误。 recycle()方法   允许应用程序尽快回收内存。

但是,如果您调用recycle()并稍后尝试绘制位图,则会出现错误:“Canvas:尝试使用循环位图”。

但您需要对the android's site training on Managing Bitmap Memory进行一些广泛的阅读,因为根据您使用的API,您将采用不同的策略。

查看Displaying Bitmaps Efficiently 的整个指南。它包含了降低内存使用量所需的所有内容:

如果您遵循这些指导原则,您应该能够摆脱内存泄漏并改善用户体验。

  

canvas.drawBitmap是否保留对Bitmap的引用?或者调用canvas.drawBitmap是否意味着Canvas对象本身具有与Bitmap一样多的内存?

当你使用它时,画布会保存对位图的引用。

Canvas适用于作为图形绘制实际表面的假装或界面 - 它可以保存所有“绘制”调用。通过画布,您的绘图实际上是在基础位图上执行的,它位于窗口中。 Canvas将绘制到定义的位图上。