2012-10-18 88 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

相關問題