我有一个从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字节),会立即耗尽某些设备上的每个应用程序限制。
有一个很棒的安卓指南
how to use Bitmaps efficiently.
按照指南,您应该能够在不丢失任何可见质量的情况下显著减少内存消耗,避免不必要的崩溃。

关于android - 如何回收位图? -位图大小超出VM预算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12125428/

10-11 22:51
查看更多