Android中的Bitmap
內存問題導致我實現了一個自定義加載器和下載器類,它將從Web下載圖像,存儲本地副本,以及如果從本地副本請求創建Bitmap
。我在SoftReference<T>
列表保持這些使他們保持一會兒,然後垃圾回收,此時類的finalize()
方法被稱爲:從終結器調用位圖#recycle()會導致Android應用程序無提示終止
protected void finalize() throws Throwable {
Log.w("IMAGEPACK", "Finalizing " + mBitmap);
if(mBitmap!=null&&!mBitmap.isRecycled()) mBitmap.recycle();
super.finalize();
}
看着logcat的,我確定這件的代碼正好在崩潰之前發生。我還介紹了代碼,它在這條線上失敗了。
我有一個解決方案,以前使用同步引用計數,它似乎很可靠,但在我想避免這種情況之前,手動編寫引用計數時遇到了很大的問題。我可能不得不恢復它,但我想知道爲什麼位圖回收在這裏失敗。
我目前正在2.3.3上對三星Galaxy S進行測試。
非常感謝,但苦澀的經歷表明事實並非如此。我花了很長時間在另一個應用程序中追蹤內存泄漏,這些應用程序可追蹤到未循環的'Bitmap',我認爲在我停止引用它們時會收集垃圾。 –