【问题标题】:How to recycle a bitmap? - bitmap size exceeds VM budget如何回收位图? - 位图大小超出 VM 预算
【发布时间】:2012-08-20 23:08:11
【问题描述】:

我有这个功能,可以从 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);

谢谢!

【问题讨论】:

标签: android


【解决方案1】:

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

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

有一个很棒的 android 指南 how to use Bitmaps efficiently.

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

【讨论】:

    【解决方案2】:

    代码看起来不错。

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

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 2011-08-23
      • 1970-01-01
      相关资源
      最近更新 更多