0

gridview のカスタム レイアウトがあります。gridview の各 raw には、プログレスバー、2 つのイメージビュー、および 2 つのテキスト ビューが含まれています。画像サイズはサムネイルサイズです。多くのビットマップをロードする必要がありますが、例: - 500 個の画像、メモリ不足エラーが発生します。画像は最初にインターネットからロードされ、次にSDカードに保存され、次回はSDカードからロードされているグリッドビューをロードします。この問題を克服する方法。グリッドビューが単一のイメージビューで膨張している場合、メモリ不足を克服するための多くの答えが見つかりました。カスタム レイアウトの使用中にこの問題を解決する方法を教えてください。グリッドビューでカスタム レイアウトを拡張しているときに、グリッドビューでこのメモリ不足エラーを処理するサンプル プロジェクトを知っているかどうか教えてください。

4

4 に答える 4

2

Application を拡張するクラスを作成するのが最善でしょう。このアプリケーション クラスは、アプリケーションがメモリ不足になるたびに onlowmemory() コールバックを提供します。そこに書くことができます

public void onLowmemory() {

Runtime.getRuntime().gc(); }

これにより、システム GC メソッドが呼び出されます。ガベージ コレクタ android を実行すると、未使用のオブジェクトがすべてガベージされます。

この問題を解決する別の方法があります。アニメーションでは、Runtime.getRuntime().gc(); を呼び出すことができます。ガベージコレクタを呼び出す。アクティビティの onDestroy() メソッドでも、Runtime.getRuntime().gc(); を呼び出すことができます。

だからあなたの問題は解決されます

于 2013-06-24T07:33:08.707 に答える
0

私は同じ問題に直面しています。通常、OutOfMemoryError は次の原因で発生します。最初のアプローチは、

BitmapFactory.decodeFile(srcImg);

画像は表示前にビットマップに変換されるため、多くの大きなビットマップは通常エラーを引き起こします。

これを克服するために、次の関数を追加しました

public static Bitmap decodeWithBounds(String srcImg, int bounds) {
    if (bounds > 0){
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(srcImg, options);

        if (options.outHeight > bounds || options.outWidth > bounds){
            options.inSampleSize = Math.max(options.outHeight/bounds, options.outWidth/bounds);
        }
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(srcImg, options);
    } else {
        return BitmapFactory.decodeFile(srcImg);
    }
}

この関数を使用して、境界 = グリッド サイズでビットマップをデコードします。

これでほとんどの問題が解決しました。

非常にローエンドな端末の場合は、try{} catch (OutOfMemoryError e){} ... を追加します。

于 2013-06-24T07:40:49.653 に答える
0

メモリ不足のグリッドビューの画像に設定されたこのコードを試してください

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;//you set size qulity for image(2,3,,4,5,6,7,8 etc..) 
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);

このビットマップをイメージビューに設定します

于 2013-06-24T07:38:39.850 に答える
0

このコードでメモリ不足例外の問題を解決します

Bitmap bitmap = BitmapFactory.decodeStream(is);
if (bitmap != null) {
    Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
    imageView = new ImageView(mContext);
    imageView.setImageBitmap(resizedBitmap);
}
于 2016-10-18T15:54:23.893 に答える