NewsAsyncTask 類中 為什么在處理完圖片后要 mTask.remove(this);
public?void?loadImages(int?start,?int?end)?{ ????for?(int?i?=?start;?i?<?end;?i++)?{ ????????String?url?=?NewsAdapter.URLS[i]; ????????Bitmap?bitmap?=?getBitmapFromCache(url); ????????//如果沒有,調(diào)用線程下載 ????????if?(bitmap?==?null)?{ ????????????//調(diào)用即下載圖片 ????????????NewsAsyncTask?task?=?new?NewsAsyncTask(url); ????????????task.execute(url); ????????????mTask.add(task); ????????}?else?{ ????????????ImageView?imageView?=?(ImageView)?mListView.findViewWithTag(url); ????????????imageView.setImageBitmap(bitmap); ????????} ????} }
在調(diào)用NewsAsyncTask該類的最后mTask.remove(this); 視頻里老師說的是圖片加載完成后刪除。但我有一個疑問,mTask最開始應該是空的,程序首先調(diào)用的就是remove而不是add。那么這里我就已經(jīng)不能理解了。其次remove后,又在該類執(zhí)行完后,把task又加了回去,我也不理解這個。相關的兩行代碼代碼:
task.execute(url);?
mTask.add(task); ??
?求懂得同學們指教。
2015-08-22
啟動:執(zhí)行onScroll(),在當前可見item添加相應task。所以最開始mTask不為空。
ps:(onScroll()方法在ListView啟動和繪制時會不斷被回調(diào))
在當前可見item中,一個item加載后,即該ImageLoader中的線程執(zhí)行完畢,就會remove task。
再加載下一個item,即開啟新線程.....
當滾動停止后,就為當前可見item每個item依次開啟新的線程,繼續(xù)add,并加載item。