2014-10-10 59 views
0
Drawable backDrawable; 

Bitmap bitmap= ............. 
backDrawable= new BitmapDrawable(con.getResources(),bitmap); 
bitmap.recycle(); 

我想回收位圖以節省內存。但是當我在後面的操作中使用backDrawable時,此代碼會崩潰。它只在刪除行bitmap.recycle()時起作用。 BitmapDrawable()只是創建一個參考而不是創建一個新的對象?Android - 新的BitmapDrawable(資源,位圖)創建一個refference或一個對象?

回答

1

如果在BitmapDrawable構造看你使用的:

public BitmapDrawable(Resources res, Bitmap bitmap) { 
    this(new BitmapState(bitmap), res); 
    mBitmapState.mTargetDensity = mTargetDensity; 
} 

它初始化你給Bitmap內部新BitmapState。綜觀BitmapState的構造:

BitmapState(Bitmap bitmap) { 
    mBitmap = bitmap; 
} 

它直接引用你給它的位圖。這是有道理的,因爲從內存的角度來看,每當你想把它包裝到Drawable中時,複製一個位圖就會非常糟糕。

+0

所以我不必擔心創建drawable會使用額外的內存。感謝您的快速響應 – Anonymous 2014-10-10 20:16:55

+0

不客氣!是的,drawable不會使用額外的位圖,所以你應該很好。另外,如果這個位圖來自一個資源,那麼最好使用'getResources()。getDrawable(R.drawable.your_image)'並讓系統爲你處理適當的緩存。 – kcoppock 2014-10-10 20:18:41

相關問題