0
看來,當我打電話setImageDrawable(空)爲ImageView的,位圖沒有被釋放。我能做些什麼來強制它釋放位圖內存?ImageView.setImageDrawable(NULL)不釋放內存
我有一個需要顯示大量可繪製的,但不是在同一時間的活動。我已經擴展了ImageView,如下所示。 XML佈局文件聲明瞭這個實例,「src」屬性設置爲「@null」。作爲替代,我有一個自定義屬性來保存可繪製資源ID。
public class ImageViewHolder extends ImageView
{
int srcId = 0;
//-----------------------------------------------------------------------------
public ImageViewHolder (Context context, AttributeSet attrs)
{
super (context, attrs);
TypedArray a = context.obtainStyledAttributes (attrs, R.styleable.ImageViewHolder, 0, 0);
srcId = a.getResourceId (R.styleable.ImageViewHolder_src, 0);
a.recycle();
}
//-----------------------------------------------------------------------------
public void showDrawable (boolean makeVisible)
{
if (makeVisible)
{
// Drawable d = getResources().getDrawable (srcId);
// setImageDrawable (d);
setImageResource (srcId);
}
else // hide & free memory
{
Bitmap bitmap = ((BitmapDrawable)getDrawable()).getBitmap();
setImageResource(0);
bitmap.recycle();
// setImageDrawable (null);
}
}
}
我試過使用SetImagerResource()來代替,但得到相同的結果。在清除drawable之後,我也嘗試調用System.gc(),並且只推遲了設備內存不足的地方。
任何想法?
你可以仔細嘗試足夠的時間[Bitmap.recycle()](http://developer.android.com/reference/android/graphics/Bitmap.html#recycle() ) – Blackbelt 2015-03-08 20:52:21
好主意。沒有工作 - 仍然出現內存不足的錯誤。 – 2015-03-08 21:28:56
位圖有多大?你有多少記憶?你使用運行時緩存嗎? – Blackbelt 2015-03-08 21:29:40