2014-02-26 35 views
1

我已經創建了一個加載的位圖圖像並將其存儲在靜態上下文類:正在加載靜態使用位圖垃圾收集不好?

public class ImgLoader extends View { 

public static Bitmap tree1; 

public ImgLoader(Context context) { 
    super(context); 
    loadImgs(); 
} 

public void loadImgs() { 
    tree1 = BitmapFactory.decodeResource(getResources(), R.drawable.tree); 
} 
} 

我後來做這個訪問此圖片:

Bitmap tree = ImgLoader.tree1; 

是否有任何替代做某事喜歡這個?因爲它可能會導致GC的一些問題。

+1

當需要時加載圖像。不要將其不必要地保存在內存中。 – guptakvgaurav

回答

2

可以將此方法添加到您的類

public void recycleBitmap(){ 
    if(tree1 != null){ 
     tree1.recycle(); 
    } 
    tree1 = null; 
} 
0

是。以靜態方式加載位圖對垃圾收集不利。由於位圖將保留在內存中,因此將消耗內存並且不會被垃圾收集。但是沒有什麼好處。

這是顯示圖像的更好方法。如果您多次使用相同的圖像,將其設置爲靜態並且重用將肯定會節省一些內存。另外如果你想在多個視圖上顯示圖像,並且不想加載它們,使它變爲靜態會幫助你。正如我們所知,膨脹的UI是一個沉重的操作,所以從IO加載位圖。因此,靜態圖像很適合使用,尤其是在需要多個副本的情況下。

0

您可以使用SoftReference來存儲您對圖像的引用。那麼如果沒有 - 在你的程序中使用圖像的地方,垃圾收集器可以自由清理它。

如果垃圾已被垃圾收集,您將需要重新加載圖像,否則它將留在內存中準備重新使用。