我有一個菜單應用程序,其中菜單項是ViewAnimator
的視圖的屏幕截圖。一切工作正常。我做screeshots這個簡單的sniplet,使用繪圖緩存寫在許多例子:無法在Android 3.0中釋放內置圖形緩存的內存
// Drawing cache is off, so build it manually and create scaled bitmap
layout.buildDrawingCache();
Bitmap bm = layout.getDrawingCache();
Bitmap bm_small = Bitmap.createScaledBitmap(bm, item_width, item_height, true);
在同一個函數我嘗試釋放用於創建截圖所有內存:
layout.destroyDrawingCache();
bm.recycle();
bm = null;
但可惜的是在垃圾收集器不釋放此位圖內存。我也用HPROF內存分析來找到一些對Bitmap的引用,它不能被釋放,但是我沒有成功。重要的信息是,我正在爲Honeycomb Android 3.0開發,所以截圖非常大 - 每個截圖都需要大約3MB的內存,並且不會釋放它。
我不明白,爲什麼回收在這個例子中不起作用。我懷疑,在我的設置中有一些非常特殊的問題:Android 3.0蜂窩+硬件加速啓用+大堆啓用+使用圖形緩存。我發現的提示都沒有幫助。
請你能解釋一下,爲什麼recycle
在這種情況下不起作用?任何幫助將非常感激。
感謝您的回答。據我所知,我不能使用更小的位圖,因爲我必須從整個佈局製作截圖。而SoftReference解決方案在我看來也不適用,因爲我不存儲任何對Bitmap的引用:/ – 2011-12-16 00:07:42