回收位图

时间:2012-07-10 17:07:28

标签: android memory-management bitmap out-of-memory

我正在处理涉及位图操作的项目。因为我不想有OutofMemoryError我试图回收每个未使用的位图。不幸的是,我已经回收太多而且“试图使用回收的位图”错误。

我正在使用:

 Bitmap.createBitmap(bmp, x,y,w,h, matrix, false);
 Bitmap.createScaledBitmap(bmp, w, h,true);

我应该在这种方法后回收bmp还是由它们回收?像:

Bitmap newBitmap = Bitmap.createBitmap(bmp, x,y,w,h, matrix, false);
bmp.recycle();

我可以在imageView.setImageBitmap()之后回收以前在这里使用过的吗? E.g。

myImageView.setImageBitmap(myBitmap);
myImageView.setImageBitmap(newBitmap);
myBitmap.recycle();

感谢您的帮助。

3 个答案:

答案 0 :(得分:9)

您应该只在不再需要时回收位图。但是,当显示时,执行需要位图。如果您不想显示它,则可以回收位图。

答案 1 :(得分:1)

只有在完成位图后才能回收位图,并确保您再也不需要使用其中的数据。这不是一种神奇的方法,你可以在任何你喜欢的地方使用它来处理位图时给你更多的记忆。

答案 2 :(得分:0)

当我想缩放位图时,我使用相同的参考:

Bitmap bmp = Bitmap.createBitmap(bmp, x,y,w,h, matrix, false); 

当第一个位图对象丢失其引用“bmp”时,它会被GC(垃圾收集器)删除,因此您不需要重新进行任何操作。至于图像视图,它只将其源代码引用到“newBitmap”,它不会创建自己的。