4

我正在从事涉及位图操作的项目。因为我不想有 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() 回收之前在这里使用的一个之后吗?例如

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

谢谢你的帮助。

4

3 回答 3

9

您应该只在不再需要时回收位图。但是,当您想要显示它时,您确实需要一个位图。如果您不想显示它,那么您可以回收位图。

于 2012-07-10T17:13:04.930 回答
1

仅在使用完位图并确保不再需要使用其中的数据后才回收位图。在处理位图时,您可以在任何您想为您提供更多内存的地方使用它并不是一种神奇的方法。

于 2012-07-10T17:14:11.770 回答
0

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

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

当第一个位图对象丢失其引用“bmp”时,它会被 GC(垃圾收集器)删除,因此您无需回收任何东西。至于图像视图,它仅将其源引用到“newBitmap”,它不会创建自己的。

于 2012-07-10T18:06:07.083 回答