一、解決新執行緒無法更新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...