我有一個ListView
其中每個單元格包含從互聯網下載的位圖。爲了避免內存不足錯誤,我想知道處理這個問題的最好方法是什麼。緩存位圖 - Android
我已經看過位圖的softreferences,但我想知道如果我在當前的活動和應用程序開始用盡內存會發生什麼。它如何決定要回收的位圖?
將文件寫入磁盤並在需要時將其加載到內存中是一種更好的方法嗎?有沒有例子?
感謝
我有一個ListView
其中每個單元格包含從互聯網下載的位圖。爲了避免內存不足錯誤,我想知道處理這個問題的最好方法是什麼。緩存位圖 - Android
我已經看過位圖的softreferences,但我想知道如果我在當前的活動和應用程序開始用盡內存會發生什麼。它如何決定要回收的位圖?
將文件寫入磁盤並在需要時將其加載到內存中是一種更好的方法嗎?有沒有例子?
感謝
我剛剛處理了一段時間。也用性能進行實驗。這是我得到的。
此答案超出lazy loading of images,因爲它涉及性能。
首先:在android上忘記SoftReferences
。由於行爲不當(很快就會發布)對緩存非常不利。我結束了使用LruCache(source for API < 12)的緩存的固定字節大小。
當通過網絡加載圖片時,您希望持久加載的圖片(在私人應用程序數據文件夾或SD卡中)。否則,用戶將被迫在每次應用啓動時加載(不必要的)數據。這裏的例行:
現在說一些表現的話。如果每個列表項目都有另一個圖像並且它們具有固定大小(例如40 x 40 dip
),那麼當加載完整圖像時(例如800 x 600 px
),您將浪費高速緩存內存,並且設備必須計算大量縮放比例。
第一種解決方案是在將圖像加載到緩存之前在步驟5.
上對位圖進行預分頻。持續縮放圖像並在下次加載時,您將獲得最佳性能。
您可以在我的CoverCache助手(CD封面 - 但可用於任何類型的圖像數據)中找到示例。它同時處理持續,縮放和緩存圖像。
有很多實現與圖像的延遲加載與通過convertView mecanism意見重用列表視圖的。例如,看看這裏:Lazy load of images in ListView
這裏有很多解決方案。
檢查此鏈接http://stackoverflow.com/questions/1919679/android-listiem-recycle-while-scroll-up-or-down和這一個也許雖然它是關閉http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-load-of-images-in-listview – 2012-01-27 17:01:03