我有ListView
,列表中的项目是自定义View
。 View
类有一个字段
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
调用实际上做了什么。谢谢你的帮助。
答案 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将绘制到定义的位图上。