亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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);
????????//如果沒有,調用線程下載
????????if?(bitmap?==?null)?{
????????????//調用即下載圖片
????????????NewsAsyncTask?task?=?new?NewsAsyncTask(url);
????????????task.execute(url);
????????????mTask.add(task);
????????}?else?{
????????????ImageView?imageView?=?(ImageView)?mListView.findViewWithTag(url);
????????????imageView.setImageBitmap(bitmap);
????????}
????}
}

在調用NewsAsyncTask該類的最后mTask.remove(this); 視頻里老師說的是圖片加載完成后刪除。但我有一個疑問,mTask最開始應該是空的,程序首先調用的就是remove而不是add。那么這里我就已經不能理解了。其次remove后,又在該類執行完后,把task又加了回去,我也不理解這個。相關的兩行代碼代碼:

task.execute(url);?

mTask.add(task); ??

?求懂得同學們指教。

正在回答

1 回答

啟動:執行onScroll(),在當前可見item添加相應task。所以最開始mTask不為空。

ps:(onScroll()方法在ListView啟動和繪制時會不斷被回調)

在當前可見item中,一個item加載后,即該ImageLoader中的線程執行完畢,就會remove task。

再加載下一個item,即開啟新線程.....

當滾動停止后,就為當前可見item每個item依次開啟新的線程,繼續add,并加載item。

0 回復 有任何疑惑可以回復我~
#1

Veritas丶 提問者

非常感謝!
2015-08-24 回復 有任何疑惑可以回復我~
#2

大強強

mTask.remove(this);這個解釋還是不是很懂,當我滾動lisview時,即調用mImageLoader.cancelAllTask(),我在ImageLoader的cancelAllTask方法中輸出mTask集合的size是0。如果是0,那么取消什么?
2016-02-10 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Android必學-異步加載
  • 參與學習       50616    人
  • 解答問題       333    個

了解Android中的異步加載處理方法,這是面試問的最多的知識點

進入課程

NewsAsyncTask 類中 為什么在處理完圖片后要 mTask.remove(this);

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號