2013-09-25 81 views
0

我想知道我加載位圖的方式是否有效,可多次使用恆定負載和位圖卸載。從靜態方法加載位圖是內存效率?

我使用靜態輔助方法,以便加載位圖從資產文件夾:

public static Bitmap assetImage(AssetManager am , String file){ 
     InputStream stream = null; 
     try{ 
      stream = am.open(file); 
      Bitmap bmp = BitmapFactory.decodeStream(stream); 
      if(stream != null){ 
       stream.close(); 
      } 
      return bmp; 
     } 
     catch(IOException e){ 

      return null; 
     } 
    } 

我把它保存在一個類(可以稱之爲雪碧)。現在當我加載或我不再需要位圖時,我正在回收它並將其歸零。然後再次使用輔助靜態方法。 我的問題是,將這段代碼幫助我避免OOM錯誤,將垃圾收集不需要的資源?

在此先感謝

回答

0

試圖優化得太快總是一個壞主意。

這種方法可以防止這樣的問題,如果你在那裏裝載噸的圖片,但如果你沒有得到這樣的錯誤一個更好的辦法可以加載所有的圖像,並將它們存儲以備將來使用,這樣你就不需要多次執行IO操作。

另外,如果你是針對Java 7中,使用try-與資源,所以你不會需要關閉流:它會自動關閉。

最後,而不是返回空值,如果沒有加載圖像,不如返回默認的(你已經在內存中),這樣你就可以避免null檢查。請參閱維基百科中的Null Object Pattern

+0

好吧,如果我太多的圖像加載到內存中,我會碰到OOM異常。這就是爲什麼我問我提到的方法是否會從內存中釋放不需要的圖像 – AngryChicken