到目前爲止,我正在使用一個SoftReference緩存來處理Android中的圖片。此緩存用於列表視圖中顯示的圖像,並且應該有助於保留內存中未顯示在屏幕上的項目圖像(如果剩餘的內存足夠多)。如何在Android中實現內存映像緩存?
這個問題是SoftReferences幾乎在最後的硬引用發佈的那一刻就被垃圾收集了。這樣做的結果是,從屏幕上移除的圖像在那個時候被垃圾收集,並且如果用戶滾動回到ListView中的該條目,則圖像從內部手機存儲器重新加載,導致複雜的延遲加載過程,結果經常重畫名單和一般糟糕的表現。
軟參考行爲的bug request指出這是預期行爲,您應該使用LRU-Cache來緩存這類內容。
知道我的問題。 LRU緩存只會佔用我允許的更多內存。但是,如果應用程序需要大量內存,它不會釋放內存。我應該如何確定我可以允許Cache使用多少內存,並且如果手機的內存情況變得緊張,是否有辦法減小緩存的大小?
此刻,圖像緩存被保存在應用程序內,作爲一種全局圖像存儲的所有活動。這會導致我的應用程序不斷使用圖像緩存的所有內存,即使我的活動在後臺或被銷燬。
謝謝你的回答 – Janusz
我看不到如何使用LruCache來解決緩存圖像或任何其他BLOB的問題。問題是它的固定大小,其中每個條目都對緩存對象有強烈的參考。這不會隨着設備的內存而擴展。 – Matthias
LruCache在大小超出您設置的限制時會將其清除。您可以重寫一個方法來幫助LruCache度量每個條目的大小。 –