我正在处理涉及位图操作的项目。因为我不想有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();
感谢您的帮助。
答案 0 :(得分:9)
您应该只在不再需要时回收位图。但是,当显示时,执行需要位图。如果您不想显示它,则可以回收位图。
答案 1 :(得分:1)
只有在完成位图后才能回收位图,并确保您再也不需要使用其中的数据。这不是一种神奇的方法,你可以在任何你喜欢的地方使用它来处理位图时给你更多的记忆。
答案 2 :(得分:0)
当我想缩放位图时,我使用相同的参考:
Bitmap bmp = Bitmap.createBitmap(bmp, x,y,w,h, matrix, false);
当第一个位图对象丢失其引用“bmp”时,它会被GC(垃圾收集器)删除,因此您不需要重新进行任何操作。至于图像视图,它只将其源代码引用到“newBitmap”,它不会创建自己的。