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