2015-06-17 69 views
0

我從內部存儲器中取出圖像,並將其粘貼在合併函數中的偉大圖像上。在66圖像之後,應用程序崩潰並且錯誤內存不足。你有什麼想法,爲什麼應用程序崩潰和如何解決it.here應用程序崩潰後的圖像沒有66 come`內存不足錯誤未解決

 public void mergeImageClicked(View v) { 
    int noOfImage = listFile.length; 
    Bitmap[] bitmap = new Bitmap[noOfImage]; 
    Bitmap[] resizedBitmap = new Bitmap[noOfImage]; 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    for (int j = 0; j < listFile.length; j++) { 
     bitmap[j] = BitmapFactory.decodeFile(listFile[j].getAbsolutePath(), options); 


     resizedBitmap[j] = ThumbnailUtils.extractThumbnail(bitmap[j], 30, 30); 

    } 

`

+1

66高分辨率位圖真的很重,它並不讓我感到驚訝......我不知道你如何使用你的位圖[]位圖數組,但也許你可以保留調整大小的... – n00dl3

回答

4

你保持你的位圖陣列全尺寸位圖的數量龐大。相反,您應該只保留一個位圖來加載和調整大小。

public void mergeImageClicked(View v) { 
    int noOfImage = listFile.length; 
    Bitmap[] resizedBitmap = new Bitmap[noOfImage]; 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    for (int j = 0; j < listFile.length; j++) { 
     Bitmap bitmap = BitmapFactory.decodeFile(listFile[j].getAbsolutePath(), options); 

     resizedBitmap[j] = ThumbnailUtils.extractThumbnail(bitmap, 30, 30); 
} 
1

你已經在Android的限制每個應用程序的內存。研究堆大小和內存管理here

在你的代碼中,你好像是在解碼Bitmap然後保存到內存中,這是不好的做法 - 因爲你總是會遲早地用完內存。

最好只保留你需要的位圖,然後在你不需要的時候釋放。看看這個如何管理Bitmaps