2012-10-18 23 views
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。试图使用回收位图

+0

检查这里[SoftReference的(http://stackoverflow.com/questions/4580006/does-softreference-calls-recycle-on-bitmap-object) – zetsin

+0

多少位图做你有?这些有多大? – Blackbelt

回答

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; 
      } 
} 
+0

以哪种方式? – Blackbelt

+0

它不会使用再生图像 – noxius

+0

对不起,它不工作。 – zaiff

0

它抛出一个异常会导致您的位图在您的ImageView使用。要调用回收,您的位图不必链接到视图。

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

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

看到这个职位: how to compress image for imageview in android

相关问题