0

アクティビティが全画面表示の画像ビューを表示するアプリケーションを実装しています。これで、アプリケーションのファイル ディレクトリにいくつかの画像がダウンロードされました。大きな画像を縮小しているアクティビティで、画像を画像ビューに設定したいと思います。アプリケーションを使用してから 10 ~ 15 分後に OutOfMemory エラーが発生します。エラーはBitmapFactoryのdecodeFileにあります。これが私のコードです:

public static int calculateInSampleSize(
        BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {
        if (width > height) {
            inSampleSize = Math.round((float)height / (float)reqHeight);
        } else {
            inSampleSize = Math.round((float)width / (float)reqWidth);
        }
    }
    return inSampleSize;
}

public static Bitmap decodeSampledBitmapFromFile(String imagePath,
        int reqWidth, int reqHeight) {

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

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

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeFile(imagePath, options);

}

今、私は reqHeight = 500 と reqWidth = 500 を与えています

このコードは Android ガイドライン ページに記載されています。不足しているものはありますか? もしそうなら、私を助けてください. 私は多くのことを試しましたが、解決策は得られませんでした。

4

3 に答える 3

2

inSampleSize = 1; を変更してください。inSampleSize = 2 または 3 を int にして、アプリケーションを再度テストします。これで問題が解決することを願っています。また、この手法を導入することをお勧めします。ビットマップや outOfMemoryError が発生しないようにすることで、すべてのイメージ dowanload に対して遅延読み込みを試してください。遅延読み込みを行うことができます - https://github.com/thest1/LazyList

于 2012-11-27T08:48:13.970 に答える
1

これを使ってみてください

Bitmap resizedbitmap2 = Bitmap.createScaledBitmap(your_bitmap, width, height,
                        true);

それはあなたを助けるでしょう。

于 2012-11-27T09:03:12.157 に答える
0

decodeSampledBitmapFromFile によって返されたビットマップのリストをどこかに保存している場合、アプリでメモリ リークが発生する可能性があります。メモリ リークをチェックし、Bitmap.recycle()を使用してビットマップをリサイクルし、Android のメモリを解放します。

于 2012-11-27T08:50:16.463 に答える