2014-05-09 40 views
0

我從圖庫中選擇圖片並將其顯示在ImageView中。但是,當我運行它時,我可以看到巨堆(高達60MB)的堆增長。使用位圖的內存堆增長

下面是代碼:

else if(requestCode == PICK_IMAGE && resultCode == RESULT_OK){    

     Uri selectedImage = data.getData(); 
     try { 
      img = (Bitmap)MediaStore.Images.Media.getBitmap(
        this.getContentResolver(), 
        selectedImage); 


     } catch (FileNotFoundException e) { 
      Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     ImgContainer.setImageBitmap(img);  
     img.compress(Bitmap.CompressFormat.PNG, 100, boas); 
     byteArray = boas.toByteArray();  
     try { 
      boas.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

所有變量已經在上課的時候正確初始化,所以這不是問題

我感謝您的時間和幫助。

+0

圖像有多大,這是在某種循環? –

+0

它不在循環中。我不知道這幅圖像有多大,但是它正在爲圖庫中的一些圖像做這件事。某些圖像加載速度快,有些會使我的UI凍結並消耗大量內存。我怎樣才能防止這一點? – user3604212

回答

0
img = (Bitmap)MediaStore.Images.Media.getBitmap(
        this.getContentResolver(), 
        selectedImage); 

每次你都要創建新的對象並將其指定給img。 改變它可能工作。

編輯:

//這可能是烏拉圭回合的單例類

public class ImageHelper { 

    private static ImageHelper imageHelper; 

     private Bitmap imageBitmap; 

     private ImageHelper() { 


      imageBitmap = //source of ur image 

     } 

     public static ImageHelper getInstance() { 
     if(imageHelper==null) { 
      imageHelper = new ImageHelper(); 
     } 
     return imageHelper; 
     } 

     public Bitmap getImage() { 

      return this.imageBitmap; 
     } 

} 

通過這樣做,你也會有隻有1 ImageHelper的對象,只能容納1的圖像的副本。

如果u有一個diferent點設置圖像,像後體U從畫廊挑選,

ü可以有一個setter方法或本,

public void setImage(Bitmap image) { 
    this.imageBitmap = image; 
} 

其中u能爲

調用
ImageHelper.getInstance().setImage(image); 

從哪裏ü要使用它,U可以通過

ImageHelper.getInstance().getImage(); 
+0

更改爲?謝謝 – user3604212

+0

你在logcat中檢查過嗎? wat給錯誤了嗎? – Nielarshi

+0

通過改變它意味着你可以擁有一個持有該圖像位圖的單例類的靜態對象,並且只要你需要,就可以使用該位圖,而不是一次又一次地創建新的位圖。 – Nielarshi