0

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

有什么修复它的建议吗?我需要为一个有很多图像的 GridView 解决这个问题(381 个图像,每个 90k)。

我来自 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);
    }
4

1 回答 1

1

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

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

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

于 2013-12-04T19:05:21.430 回答