非同步任務 AsyncTask

2022-07-16 21:57:14 字數 2220 閱讀 7491

1.android ui元件更新簡介

android的ui執行緒主要負責處理使用者的按鍵事件、使用者觸屏事件及螢幕繪圖事件等,因此開發者的其它操作不應該,也不能阻塞ui執行緒,否則ui介面將會變的停止響應。android預設約定當ui執行緒阻塞超過20秒將會引發anr異常。不要在ui執行緒中執行一線耗時的操作。

為了避免ui執行緒失去響應的問題,android建議將耗時操作放在新的執行緒中完成,但是新的執行緒也可能需要動態更新ui元件:例如需要從網上獲取乙個頁面,然後在textview中顯示,辭職就應該將連線的網路、獲取網路資料的操作放在新的執行緒中,但是獲取網路資料以後,新的執行緒不允許直接更新ui元件。

為了介面新執行緒無法更新ui元件問題,android提供了如下幾種解決辦法:

1.使用handler實現執行緒之間的通訊

2.activity.runonuithread(runnable)

3.view.post(runable)

4.view.postdelayed(runnable,long)

使用非同步新執行緒更新ui元件時比較簡單。

2.async<>抽象類:

params:啟動任務執行的輸入引數的型別。

progress:後台任務完成的進度值的型別

result:後台執行任務完成後返回結果的型別。

3.async子類的使用步驟:

第一步:建立asynctask子類(繼承asynctask的類),並為三個泛型指定型別。如果某個泛型引數不需要指定型別,可將它指定為void。

第二步:根據需要,實現asynctask的如下方法

result doinbackground(params... params);//

後台執行緒將要完成的任務,該方法可以呼叫publishprogress(progress... values)方法更新任務的執行進度

onprogressupdate(progress... values);//

更新任務的執行進度後,將會處罰該方法

onpreexecute() //

在執行後台耗時操作前被呼叫,一般用於完成一些初始化的工作,例如顯示進度條等

onpostexecute(result result) //

當doinbackground()完成後,系統會自動呼叫該方法,並將doinbackground()的返回值傳給該方法。

第三步:呼叫asynctask子類的例項的execute(params... params)開始執行耗時任務。

4.使用非同步的規則:

1.必須在ui執行緒中建立asynctask的例項

2.必須在ui執行緒中建立asynctask的execute()方法

3.asynctask的onpreexecute()、onpostexecute(result result)、doinbackground(params... params)、onprogressupdate(progress... values)方法,由android系統負責呼叫。

4.每乙個asynctask只能被執行一次,多次呼叫將會引發異常

5.非同步任務的示例:

public

class asynctaskactivity extends

activity

catch

(exception e)

}});

}class downtask extends asynctask

//@override

protected

string doinbackground(url... params)

return

sb.tostring();

}catch

(exception e)

return

null

; }

//@override

protected

void

onpostexecute(string s)

//@override

protected

void

onpreexecute()

//@override

protected

void

onprogressupdate(integer... values) }}

acitvitycode

結果:

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上將其源 顯示出來,此時就要連線網路 獲取網路資料的操作放在新執行緒中完成。問題是獲...