一、為了解決新執行緒不能更新ui元件的問題,android提供了如下幾種解決方案。
1)使用handler實現執行緒之間的通訊;
2)activity.runonuithread(runnable);
3)view.post(runnable);
4)view.postdelayed(runnable,long).
二、asynctask適用於簡單的非同步處理,不需要借助執行緒和handler即可實現。asynctask是乙個抽象類,通常用於被繼承,繼承asynctask時需要指定如下三個泛型引數。
1)params:啟動任務執行的輸入引數型別
2)progress:後台任務完成的進度值的型別
3)result:後台執行任務完成後返回結果的型別
三、實現asynctask實現步驟:
1)建立asynctask的子類,並為三個泛型引數指定型別。如果某個泛型引數不需要指定型別,可將它指定為void。
2)根據需要,實現asynctask的如下方法:
(1)doinbackground(params...):重寫該方法是後台執行緒將要完成的任務。該方法可以呼叫publishprogress(progress... values)方法更新任務的執行進度。
(2)onprogressupdate(progress.. values):在doinbackground()方法中呼叫publishprogress()方法更新任務的執行進度後,將會觸發該方法。
(3)onpreexecute():該方法將在執行後台耗時操作前被呼叫。通常該方法用於完成一些初始化的準備工作,比如在介面上顯示進度條等。
(4)onpostexecute(result result):當doinbackground()完成後,系統會自動呼叫0npostexecute()方法,並將doinbackground()方法的返回值傳給該方法。
3)呼叫asynctask子類的例項的execute(params... params)開始執行耗時任務。
四、使用asynctask時必須遵守如下規則:
1)必須在ui執行緒中建立asynctask的例項。
2)必須在ui執行緒中呼叫asynctask的execute()方法。
3)asynctask的onpreexecute()、onpostexecute(result result)、doinbackground(params...)、onprogressupdate(progress.. values)方法,不應該由程式設計師**呼叫,而是由android系統負責呼叫。
4)每個asynctask只能被執行一次,多次呼叫將會引發異常。
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上將其源 顯示出來,此時就要連線網路 獲取網路資料的操作放在新執行緒中完成。問題是獲...