然而這里使用了異步機制,也就是說先返回ConvertView,再等異步線程修改,這是閃的本質!由于教程里使每個異步線程人工阻塞了1s,那么上來有8個異步線程在運行(編號1-8),如果1s之內下滑了ListView比如說下滑了8個,那么新更新的8個item還是用的以前的內存,【并且】又開啟了8個異步線程(編號9-16)。因為預先設定了一個默認圖片,所以先顯示綠色的默認icon圖片。然后1-8號異步線程運行完畢,更新ImageView(閃),緊跟著9-16異步線程運行完畢,又更新imageView(閃),最終顯示正確結果。這就是下滑時先顯示默認圖片,再閃一下錯誤圖片,最后閃一下正確圖片的本質過程。
2016-05-29
我來說一下為什么會閃。這是【同時】使用ConvertView和異步機制造成的。一個屏幕一次顯示8個item,當第9個item劃進屏幕時,ListView對adapter說,返給我一個view,我要顯示。adapter調用getView()方法,由于使用了緩存機制,getView()在初始化8個item以后所有返回的view(ConvertView)內存地址都是這8個中的。如果【不使用】異步機制加載圖片,那么返回的這個ConvertView是被更新以后返給ListView使用的。效果是上滑屏幕沒反應,等了半天,突然加載出來,但是不會閃。
2016-05-29
最贊回答 / qq_Dreamkiller_0
程序退出之后,如果你的應用沒有駐留服務,內存還是有可能被回收的,在對圖片緩存情況下,為了保險可以在加一個硬盤緩存DiskLruCache,雙緩基本滿足日??捶?,內存中沒有,硬盤中有,也不用去下載,除非內存與硬盤中都沒有,程序在去下載。OK郭神的博客中有DiskLruCache使用方法。不謝http://blog.csdn.net/guolin_blog/article/details/28863651
2016-05-29
最贊回答 / 陳恩俊3205650
出來的是空白頁的話,你可以設個斷點試試,看看你的list里面有沒有數據,有可能是你JSON解析那出問題了,或者一些你沒注意到的地方,這一大節課我快看完了,程序是一直跟著做的,到目前看來沒什么問題??!
2016-05-19