如何回收位图?-位图大小超过VM预算



我有这个函数,可以从SD加载一个大位图并旋转它。

然而,在第二次或第三次旋转后,我得到一个位图大小超过VM预算的错误。

有什么想法吗?我确实回收了旧位图,不是吗?

public void next(String s, int d)
{
if ( mBitmap!=null ) { mBitmap.recycle(); }
deg = deg + d;
mBitmap = BitmapFactory.decodeFile(s);
Matrix matrix = new Matrix();
matrix.postRotate(deg);
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth() , mBitmap.getHeight(), matrix, true);

谢谢!

当您不正确使用位图时,内存不足错误并不罕见。

位图占用大量内存,尤其是对于像照片这样的丰富图像。例如,Galaxy Nexus上的相机可以拍摄高达2592x1936像素(500万像素)的照片。如果使用的位图配置是ARGB_8888(Android 2.3以后的默认配置),则将此图像加载到内存中需要大约19MB的内存(2592*1936*4字节),这会立即耗尽某些设备上每个应用程序的限制。

上有一个很棒的android指南如何有效地使用位图。

按照指南,你应该能够在不损失任何可见质量的情况下大幅减少内存消耗,避免不必要的崩溃。

代码看起来不错。

但是,此异常还取决于位图的大小(分辨率和位图格式)以及其他消耗内存的对象。

最新更新