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) //第三步:呼叫asynctask子類的例項的execute(params... params)開始執行耗時任務。當doinbackground()完成後,系統會自動呼叫該方法,並將doinbackground()的返回值傳給該方法。
4.使用非同步的規則:
1.必須在ui執行緒中建立asynctask的例項
2.必須在ui執行緒中建立asynctask的execute()方法
3.asynctask的onpreexecute()、onpostexecute(result result)、doinbackground(params... params)、onprogressupdate(progress... values)方法,由android系統負責呼叫。
4.每乙個asynctask只能被執行一次,多次呼叫將會引發異常
5.非同步任務的示例:
publicacitvitycodeclass 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) }}
結果:
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上將其源 顯示出來,此時就要連線網路 獲取網路資料的操作放在新執行緒中完成。問題是獲...