我正在爲我的Android應用程序實現緩存機制。SoftReference太早收集垃圾
我使用SoftReference
,就像我找到的許多例子。問題是,當我在我的ListView
中向上或向下滾動時,圖像的大多數已被清除。我可以在LogCat中看到,每次應用程序加載新圖像時,我的應用程序都會被垃圾收集。這意味着ListView
中不可見圖像的大多數都消失了。
所以,每次我回捲到一個較早的位置(我真的下載的圖片前)我不得不再次下載圖像 - 他們不緩存。
我也研究過這個話題。 According to Mark Murphy in this article,似乎有(或是?)與SoftReference
的錯誤。其他一些結果表明同樣的事情(或相同的結果); SoftReference
s正在清理得太早。
有什麼工作方案嗎?
**太**早?如果需要記憶,它將被清除。誰說它太早?如果系統想要清除它,這就是softreference的用法。 – binnyb 2011-04-22 17:11:14
正確。但是不需要更多的記憶,因爲我可以輕鬆地在內存中容納大約50張圖像。但爲了避免OOM錯誤,我需要使用這種緩存機制。 – Wroclai 2011-04-22 17:12:52
我建議你緩存每張圖片,這種方式當它被清除時,你不必從網頁上獲取它(除非它不存在於緩存中) – binnyb 2011-04-22 17:15:47