-1

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

设置位图的代码:

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;
        }

非常感谢。

4

2 回答 2

0

根据Android 开发者的说法,

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

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

于 2013-10-30T15:21:18.947 回答
0

查看有关位图内存管理的 Android培训。

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

于 2013-10-29T14:24:01.843 回答