2011-08-01 48 views
3

Hello im測試代碼以避免加載大量位圖時出現內存崩潰。我有一個小問題,關於下面的代碼Android中的位圖內存管理

Bitmap bmp; 
    long sizepreload, sizepostload,bmppixels; 
    sizepreload= Debug.getNativeHeapAllocatedSize(); 

    bmp=getImageBitmapFromUrl("http://www.google.com/intl/en_com/images/srpr/logo2w.png"); 
    sizepostload=Debug.getNativeHeapAllocatedSize(); 
    bmppixels=bmp.getHeight()*bmp.getWidth(); 
    Log.d("bmp test","pre="+sizepreload+"\n" + 
      "post="+sizepostload+"\n" + 
      "bmppixels="+bmppixels+"\n"+ 
      "ratio="+(sizepostload-sizepreload)/bmppixels 
      ); 

該片段的回報是:

pre=4260464 
post=4333112 
bmppixels=26125 
ratio=2 

因此,一個位圖需要每像素2個字節。對於所有位圖,每像素16位是恆定的,或者它是可變的(取決於屏幕密度或圖像質量)。如果它的變量我怎麼能從Bitmap類中得到這個比例?

在此先感謝

那是從一個URL下載的代碼:

public static Bitmap getImageBitmapFromUrl(String url){ 
    URL aURL; 
    Bitmap result = null; 
    try { 
     aURL = new URL(url); 
     URLConnection conn = aURL.openConnection(); 
     conn.connect(); 
     InputStream is = conn.getInputStream(); 
     result= BitmapFactory.decodeStream(is); 
     is.close(); 

    } catch (Exception e) { 
     result=null; 
     e.printStackTrace(); 
    } 
    return result; 
} 

回答

2

位圖可以是每像素高達4個字節,這取決於位圖的格式。對於屏幕密度來說這不是可變的。但是,在繪製位圖時,可能需要調整屏幕密度的大小,這會暫時影響堆。

+1

:這裏如何清除位圖內存而不影響堆。 – naresh