在Android pre-honeycomb上,Bitmap具有奇怪的內存問題,因爲它們的數據未存儲在VM中。因此它不會被GC跟蹤或刪除。相反,當Bitmap.recycle()
被調用(並且這也在Bitmap
的終結器中自動完成)時被移除。引用計數android帶高速緩存的位圖
這會導致圖像緩存時出現問題。當位圖將被驅逐時,我不能簡單地調用recycle()
,因爲我不知道其他人是否正在使用它。
我的第一個想法是在加載每個位圖之前做System.gc()
。這樣,希望孤兒Bitmap
將最終確定和本地內存釋放。但是it doesn't work。 編輯:其實它確實有點工作。我把我的System.gc()
放在錯誤的地方,移動它之後,將緩存大小減半(看起來像是一個非常小的2MB未壓縮的位圖數據),我的應用程序似乎不再崩潰(到目前爲止)!
我的下一個念頭,就是實現人工引用計數,通過繼承Bitmap
,並呼籲所有我的活動onDestroy()
方法ReferenceCountedBitmap.decrementCount()
。但我不能因爲Bitmap
是最終的。
我現在計劃BitmapManager
這使WeakReference
的對位圖,並具有類似的方法:
public void using(Bitmap bm);
public void free(Bitmap bm);
這算引用。
有沒有人有任何經驗或建議處理這個?在你提出這個建議之前,我不能忽視80%的市場。