asynctask 顧名思義,是在我們需要執行同步任務的時候使用,這個類可以做一些後台操作,然後將結果返回的ui來,因為這個類本身封裝了handler和thread,所以我們不需要直接去操作這兩個類,使用起來也非常簡單。
原始碼裡的注釋說了,asynctask適合做一些short operations(短操作),如果你需要長時間地維持多執行緒,建議用executor,threadpoolexecutor,futuretask等類來實現。
我們使用asynctask時需要寫乙個類繼承asynctask(asynctask是個抽象類),需要提供三個引數的泛型型別(asynctask類最重要的三個引數):
當乙個同步任務執行時,要經歷四個步驟(可以理解為生命週期)
doinbackground,最重要最核心的工作就在這個方法裡進行,這個方法是執行在後台執行緒,在這個方法裡你可以呼叫publishprogress()方法來改變進度(這個方法執行在ui執行緒),當然,如果你不需要顯示進度也可以不使用。doinbackground最後要求返回乙個result,即執行結果。
onprogressupdate,當publishprogress()被呼叫時,即進度改變時,這個方法就會執行,在ui執行緒執行,可以在這個方法裡改變進度條。當然跟publishprogress一樣的,如果你不需要顯示進度就無需用它。
onpostexecute,在這裡面可以使用在doinbackground 得到的結果處理操作ui。 此方法在主線程執行,任務執行的結果作為此方法的引數返回。
publicclass downloadfilestask extends
asynctask(url, integer, long)
return
totalsize;
}protected
void
onprogressupdate(integer... progress)
protected
void
onpostexecute(long result)
}
我們只需要在ui執行緒裡創立這個類的物件,然後呼叫其execute()方法就可以。如果你要取消asynctask任務,就執行cancel()方法,如果想在取消任務時做些操作,可以重寫oncancelled(),這個方法會在任務cancel時取代onpostexecute被**。
AsyncTask非同步任務
asynctask非同步任務怎麼寫 寫乙個類繼承asynctask,重寫方法 doinbackgroud 再new 這個類,執行物件 execute 在ui執行緒裡面寫這個類的實現方法 doinbackground有可能是新開的執行緒,有可能是執行緒池裡面的執行緒 執行順序 onpreexecute...
非同步任務(AsyncTask)
一 解決新執行緒無法更新ui組建問題的方案 為了解決新執行緒不能更新ui組建的問題,andorid提供了如下幾種解決方案 1.使用handler實現執行緒之間的通訊。mhandler new handler public class mythread extends thread 2.activit...
非同步任務AsyncTask
強調!以下只是我個人看法,如有錯誤的地方請文明指出 為避免主線程失去響應問題,android建議將耗時操作放在新的執行緒中,但是新的執行緒可能需要動態的更新ui元件,比如需要從網上獲取乙個網頁,讓後在textview上將其源 顯示出來,此時就要連線網路 獲取網路資料的操作放在新執行緒中完成。問題是獲...