试图使用循环位图

时间:2012-10-18 11:50:38

标签: android

    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的时间和地点

2 个答案:

答案 0 :(得分: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;
           }
}

答案 1 :(得分:0)

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

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

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

看这篇文章: how to compress image for imageview in android