天天看點

Android ListView異步加載圖檔錯位、重複、閃爍分析以及解決方案

我們在使用ListView異步加載圖檔的時候,在快速滑動或者網絡不好的情況下,會出現圖檔錯位、重複、閃爍等問題,其實這些問題總結起來就是一個問題,我們需要對這些問題進行ListView的優化。

比如ListView上有100個Item,一屏隻顯示10個Item,我們知道getView()中convertView是用來複用View對象的,因為一個Item的對應一個View對象,而ImageView控件就是View對象通過findViewById()獲得的,而我們在複用View對象時,同時這個ImageView對象也被複用了。比如第11個Item的View複用了第1個Item View對象,那麼ImageView就同時被複用了,是以當圖檔沒下載下傳出來,這個ImageView(第11個Item)顯示的資料就是複用(第1個Item)的資料。

1:Item圖檔顯示重複

這個顯示重複是指目前行Item顯示了之前某行Item的圖檔。

比如ListView滑動到第2行會異步加載某個圖檔,但是加載很慢,加載過程中ListView已經滑動到了第14行,且滑動過程中該圖檔加載結束。第2行已不在螢幕内,根據上面介紹的緩存原理,第2行的View對象可能被第14行複用,這樣我們看到的就是第14行顯示了本該屬于第2行的圖檔,造成顯示重複。

2. Item圖檔顯示錯亂

這個顯示錯亂是指某行Item顯示了不屬于該行Item的圖檔。

跟上面的原因一樣。

3. Item圖檔顯示閃爍

上面介紹的另外一種情況,如果第14行圖檔又很快加載結束,是以我們看到第14行先顯示了複用的第2行的圖檔,立馬又顯示了自己的圖檔進行覆寫造成閃爍錯亂。