当我尝试使用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);
}
答案 0 :(得分:0)
如果它们的大小相同,您可以调整大小为未使用的旧位图(您需要保留一个参考计数器,以便您可以知道gridview何时不再使用它)。
请参阅https://developer.android.com/training/displaying-bitmaps/manage-memory.html
此外,如果您使用现有代码耗尽内存,您的内存缓存可能太大了......使用堆转储或类似的东西来查找泄漏的内容。