次の方法を使用して、ビットマップのサイズを元のサイズから200dpX200dpに減らしています。これは、ビットマップのサイズを縮小しなかった場合に発生するメモリ不足の問題によるクラッシュを防ぐためです。ただし、BitmapFactory.opitonsを使用してビットマップのサイズを縮小した後でも、メモリ不足の問題が発生します。
誰かがbitmap.recycle();を使用することを提案しました。私はこれまでこれを使用したことがなく、ロケーションログキャットがメモリ不足が発生していると言っている場所のために少し混乱しています。
logcatは、ここでビットマップを返すメソッドのreturnステートメントの画像縮小メソッドでメモリの問題が発生していることを示しています。
return BitmapFactory.decodeFile(fileName, options);
では、このコードのどこでbitmap.recycle()を呼び出すのでしょうか?
メソッド全体のコードは次のとおりです。
public static Bitmap decodeSampledBitmapFromResource(String fileName, int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(fileName, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
// logCat says running out of memory here on the return statement
return BitmapFactory.decodeFile(fileName, options);
}