Android:解码图像会一直导致GC_FOR_ALLOC

时间:2013-11-09 06:05:13

标签: android

当我尝试使用BitmapFactory进行图像解码时,它会一直导致GC_FOR_ALLOC,然后应用程序崩溃了OutOfMemory。

有任何修复建议吗?我需要为一个包含大量图片的GridView解决这个问题(每张图片共计381张图像)。

来自AsyncTask的代码:

@Override
        protected Bitmap doInBackground(Integer... params) {
            data = params[0];
            final Bitmap bitmap = decodeSampledBitmapFromResource(
                    context.getResources(), data, 100, 100);
            addBitmapToMemoryCache(String.valueOf(params[0]), bitmap);
            return bitmap;
        }

我的decodeSampledBitmapFromResource方法:

public static Bitmap decodeSampledBitmapFromResource(Resources res,
            int resId, int reqWidth, int reqHeight) {

        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(res, resId, options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, reqWidth,
                reqHeight);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeResource(res, resId, options);
    }

1 个答案:

答案 0 :(得分:0)

如果它们的大小相同,您可以调整大小为未使用的旧位图(您需要保留一个参考计数器,以便您可以知道gridview何时不再使用它)。

请参阅https://developer.android.com/training/displaying-bitmaps/manage-memory.html

此外,如果您使用现有代码耗尽内存,您的内存缓存可能太大了......使用堆转储或类似的东西来查找泄漏的内容。