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

它会引发异常,因为您的位图在 ImageView 中使用。要调用回收,您的位图不必链接到视图。

由于您的所有图片似乎都已显示(或链接到物理视图对象),因此您无法回收。

处理您的问题的一种方法是为每张图片使用更少的内存。

请参阅这篇文章: 如何在 android 中为 imageview 压缩图像

于 2012-10-18T12:14:49.020 回答
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 回答