臥槽,我必須吐槽一下,老師的代碼風格,跟我寫的完全不一樣?。m然我是小白但是代碼風格和官方源碼很像幾乎模仿),簡單的代碼寫的很復雜,我沒法接受,去看blog算了。面向?qū)ο蟮乃枷霙]有怎么用,我感覺老師是用C或者其他語言轉(zhuǎn)到Android的。
2016-05-30
如果給每個ImageView設(shè)置了tag以后,當1-8號異步線程運行完畢后,會發(fā)消息給handler,讓他進行更新ui的操作,可是在1-8號線程發(fā)消息之前,9-16號線程已經(jīng)更新了1-8和9-16共用的ImageView控件的tag,所以1-8號線程的消息雖然發(fā)給了handler,但是不滿足條件,handler不會進行ui更新。
p.s.完全理解這整個過程真的不容易,希望對你們有幫助。
p.s.完全理解這整個過程真的不容易,希望對你們有幫助。
2016-05-30
純手工跟打,注釋大部分保留,還加了自己的注釋,分享給各位moocer;
鏈接:http://pan.baidu.com/s/1c0sJlO 密碼:w3aq
鏈接:http://pan.baidu.com/s/1c0sJlO 密碼:w3aq
2016-05-29
然而這里使用了異步機制,也就是說先返回ConvertView,再等異步線程修改,這是閃的本質(zhì)!由于教程里使每個異步線程人工阻塞了1s,那么上來有8個異步線程在運行(編號1-8),如果1s之內(nèi)下滑了ListView比如說下滑了8個,那么新更新的8個item還是用的以前的內(nèi)存,【并且】又開啟了8個異步線程(編號9-16)。因為預先設(shè)定了一個默認圖片,所以先顯示綠色的默認icon圖片。然后1-8號異步線程運行完畢,更新ImageView(閃),緊跟著9-16異步線程運行完畢,又更新imageView(閃),最終顯示正確結(jié)果。這就是下滑時先顯示默認圖片,再閃一下錯誤圖片,最后閃一下正確圖片的本質(zhì)過程。
2016-05-29
我來說一下為什么會閃。這是【同時】使用ConvertView和異步機制造成的。一個屏幕一次顯示8個item,當?shù)?個item劃進屏幕時,ListView對adapter說,返給我一個view,我要顯示。adapter調(diào)用getView()方法,由于使用了緩存機制,getView()在初始化8個item以后所有返回的view(ConvertView)內(nèi)存地址都是這8個中的。如果【不使用】異步機制加載圖片,那么返回的這個ConvertView是被更新以后返給ListView使用的。效果是上滑屏幕沒反應,等了半天,突然加載出來,但是不會閃。
2016-05-29