【问题标题】:Bitmap size exceeds VM budget memory error位图大小超出 VM 预算内存错误
【发布时间】:2013-10-29 13:55:42
【问题描述】:

我正在设置一个位图作为我的背景,它工作正常,没有错误。但是,当我按下后退按钮并再次进入后台活动时,我得到了上述内存不足错误。当活动失去焦点时,我需要清除什么吗?

位图设置代码:

BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 1;
    options.inJustDecodeBounds = false;
    map = BitmapFactory.decodeFile(mapFile.getAbsolutePath(), options);

然后我使用 createScaledBitmap() 来设置图像。

仅当我离开活动并返回活动时才会出现此内存不足问题。第一次它工作正常,所以我猜我在内存中创建了多个位图图像但看不到哪里?

如果里面有东西,这里是 decodeFile() 方法:

try {
                // decode image size
                BitmapFactory.Options o = new BitmapFactory.Options();
                o.inJustDecodeBounds = true;
                BitmapFactory.decodeStream(new FileInputStream(f), null, o);
                // Find the correct scale value. It should be the power of 2.
                final int REQUIRED_SIZE = 70;
                int width_tmp = o.outWidth, height_tmp = o.outHeight;

                int scale = 1;
                while (true) {
                    if (width_tmp / 2 < REQUIRED_SIZE
                            || height_tmp / 2 < REQUIRED_SIZE)
                        break;
                    width_tmp /= 2;
                    height_tmp /= 2;
                    scale++;
                }

                // decode with inSampleSize
                BitmapFactory.Options o2 = new BitmapFactory.Options();
                o2.inSampleSize = scale;
                return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
            } catch (FileNotFoundException e) {
            }
            return null;
        }

非常感谢。

【问题讨论】:

    标签: java android memory bitmap


    【解决方案1】:

    查看 Android training 关于位图内存管理。

    关于您的问题,请在完成位图后尝试调用Bitmap.recycle(),例如在onDestroy() 方法中。

    【讨论】:

    • 嗨,这就是我的想法。当我只使用后退按钮然后返回活动时,是否调用了 onDestory()?我以为它会被暂停?
    • 知道了,在 onStop() 上回收
    【解决方案2】:

    根据Android Developer

    Android 设备可以为单个应用程序提供低至 16MB 的内存。

    基本上,您的图像正在加载但未从应用程序中释放,因此空间不足,因此会发生错误。不久前我遇到了这个错误,直到我偶然发现了一个关于如何解决它的教程。我建议按照上面的步骤操作。这是tutorial

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 2012-08-09
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多