1
    for (int imageId : mImageIds) {
            Bitmap originalImage;
            originalImage= BitmapFactory.decodeResource(
                    getResources(), imageId);
            ImageView imageView=null;
            imageView = new ImageView(mContext);
            imageView.setImageBitmap(originalImage);
            imageView.setLayoutParams(new myView.LayoutParams(
                    (int) ((6 * width) / 10), MenuHeight));
            Log.i("MenuHeight", "" + MenuHeight);
            Log.i("MenuWidth", "" + (6 * width) / 10);

            imageView.setScaleType(ScaleType.MATRIX);
            mImages[index++] = imageView;
            originalImage.recycle();

        }

私はこのスニペットを使用しており、リサイクル ビットマップを使用しようとすると例外が発生します。ビットマップをリサイクルしなかった場合、メモリが消費されます。コードで bitmap.recycle をいつ、どこで使用するのが最適か教えてください。

4

2 に答える 2

0

これで修正されます:

     for (int imageId : mImageIds) {
         if(originalImage!=null && !originalImage.isRecycled()){             
                Bitmap originalImage;
                originalImage= BitmapFactory.decodeResource(
                        getResources(), imageId);
                ImageView imageView=null;
                imageView = new ImageView(mContext);
                imageView.setImageBitmap(originalImage);
                imageView.setLayoutParams(new myView.LayoutParams(
                        (int) ((6 * width) / 10), MenuHeight));
                Log.i("MenuHeight", "" + MenuHeight);
                Log.i("MenuWidth", "" + (6 * width) / 10);

                imageView.setScaleType(ScaleType.MATRIX);
                mImages[index++] = imageView;

                originalImage.recycle();
                originalImage = null;
           }
}
于 2012-10-18T11:58:46.037 に答える
0

ビットマップが ImageView で使用されているため、例外がスローされます。リサイクルを呼び出すために、ビットマップをビューにリンクする必要はありません。

すべての写真が表示されている (または物理ビュー オブジェクトにリンクされている) ように見えるため、リサイクルできません。

問題を処理する方法は、各画像のメモリ使用量を減らすことです。

この投稿を参照してください: Androidでimageviewの画像を圧縮する方法

于 2012-10-18T12:14:49.020 に答える