的Java虛擬機將自動收集您不需要的StateListDrawable
S的照顧。所有你需要做的就是確保有沒有辦法StateListDrawable
本身可以從你的程序,或者通過重新分配引用到另一個Object
,或者通過引用設置爲null
引用。它甚至沒有問題,如果在StateListDrawable
仍持有你想要保留對其他對象的引用(比如你討論的回調)...一旦Object
不能被引用,它是符合垃圾回收。當虛擬機認爲它是釋放內存的好時機時,它會爲您刪除StateListDrawable
,您無需擔心自己在任何對象上調用recycle()
。
一個簡單的方法,看看這個,如果你使用的是Eclipse是查看logcat的消息你的程序在模擬器中運行,同時編輯。偶爾會有消息說:「GC在xxx ms中釋放了xxx對象/ xxx字節。」
從Java tutorials:
「一些面向對象的語言要求,你讓你創建所有 對象的跟蹤和你明確地消滅他們,當他們 不再需要Java平臺允許您可以根據需要創建儘可能多的對象(當然,受限於您的系統可以處理的內容),而且您不必擔心將其銷燬。運行時環境在確定它們是對象時會刪除對象 不再使用這個過程被稱爲垃圾收集灰。當沒有更多的 引用到該對象
一個目的是進行垃圾回收。當變量超出範圍時,保存在變量中的參考文件通常是 。或者,您可以通過將變量設置爲 特殊值null來顯式刪除對象引用。請記住,一個程序可以有多個對同一個對象的 引用;對象的所有引用必須 下降前的對象符合垃圾收集「
編輯:從documentation爲「Bitmap.recycle()`,
「。不含原生對象與此位圖相關聯,並清除對像素數據的引用...這是一種先進的呼叫,通常 無需調用,因爲正常的GC過程中會釋放此 內存時有此位沒有更多的引用。」
我感興趣的是這一點。找到一種方式? – 2012-05-22 14:19:53
一些代碼將有助於..位圖加載和設置代碼 – Ronnie 2012-05-23 19:03:36
我認爲問題很明顯,您有一個按鈕或一些視圖,它們在StateListDrawable中包含多個位圖,並且您想要在完成後回收它們它目前我有一個「位圖」清潔類,我也傳遞位圖(包括他們的上下文)onDestroy,我用上下文調用位圖清理器,它將回收所有與該上下文相關的位圖。想知道是否有更好的解決方案。 – 2012-05-24 14:57:00