非同步任務(AsyncTask)

2021-06-21 03:27:55 字數 2226 閱讀 1049

一、解決新執行緒無法更新ui組建問題的方案

為了解決新執行緒不能更新ui組建的問題,andorid提供了如下幾種解決方案: 

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

mhandler = new handler() 

};

public class mythread extends thread 

}

2.activity.runonuithread(runnable)。 

public void onclick( view v ) );

}}).start();

}

3.view.post(runnable)。 

public void onclick( view v ) );

}}).start();

}

4.view.postdelayed(runnable)。

二、asynctask抽象類

asynctask是乙個抽象類,通常用於被繼承,繼承asynctask需要指定如下三個泛型引數: 

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

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

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

//ui執行緒中執行

new downloadimagetask().execute( "www.91dota.com" );

private class loadtask extends asynctask    

protected void onpostexecute( string result )

三、asynctask的特點

更輕量級一些,適用於簡單的非同步處理,不需要借助執行緒和handler即可。 

四、使用asynctask的步驟

1.建立asynctask的子類,並為三個泛型引數指定型別。如果某個泛型引數不需要指定型別,可將它指定為void。 

2.根據需要,實現asynctask的如下方法: 

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

onprogressupdate(progress... values):在doinbackground()方法中呼叫publishprogress()方法更新任務的執行進度後,就會觸發該方法。 

onpreexecute():執行後台耗時操作前被呼叫,通常使用者完成一些初始化操作,比如在介面上顯示進度條。 

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

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

五、使用asynctask時必須遵守的規則

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

必須在ui執行緒中呼叫asynctask的execute()方法。 

asynctask的onpreexecute()、onpostexecute(result result)、doinbackground(params... params)、onprogressupdate(progress... values)方法,不應該由程式設計師**呼叫,而是由android系統負責呼叫。 

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

幫助理解:

AsyncTask非同步任務

asynctask非同步任務怎麼寫 寫乙個類繼承asynctask,重寫方法 doinbackgroud 再new 這個類,執行物件 execute 在ui執行緒裡面寫這個類的實現方法 doinbackground有可能是新開的執行緒,有可能是執行緒池裡面的執行緒 執行順序 onpreexecute...

非同步任務AsyncTask

強調!以下只是我個人看法,如有錯誤的地方請文明指出 為避免主線程失去響應問題,android建議將耗時操作放在新的執行緒中,但是新的執行緒可能需要動態的更新ui元件,比如需要從網上獲取乙個網頁,讓後在textview上將其源 顯示出來,此時就要連線網路 獲取網路資料的操作放在新執行緒中完成。問題是獲...

AsyncTask非同步任務

android中實現非同步機制的方法有兩種,handler和asynctask。handler在使用時,需要新開闢乙個執行緒,在任務完成以後,通過sendmessage 等方法通知ui執行緒進行介面更新。相比起handler,asynctask顯得更加簡單,內部封裝了執行緒池 執行緒和handler...