1. 程式人生 > >AsyncTask的使用及引數、方法的介紹

AsyncTask的使用及引數、方法的介紹

在安卓開發的時候,為了避免OOM問題或者提高程式執行速度,一般不會在主執行緒中做耗時的操作。因此當有需要做耗時操作的時候,都會開啟一個子執行緒,通過handler來獲取資料後更新UI,而Android給我們提供了一個類AsyncTask,可以看做是 thread+handler的結合。

AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以通過介面實現UI進度更新),最後反饋執行的結果給UI主執行緒。

 關於AsyncTask的幾個方法和引數具體看程式碼中註釋:

public void start(View view){
			//第一個引數是doInbackground回撥中傳入的引數
			//第二個引數是進度,onProgressUpdate的引數型別
			//第三個引數是:doInbackground返回值型別,onPostExecute傳入的引數型別
			new AsyncTask<Integer, Integer, Integer >() {
				
				@Override
				protected void onPreExecure(){
					//放在主執行緒中,準備執行前的回撥,呼叫這個方法後才呼叫doInBackground
				}
				@Override
				protected Void doInBackground(Integer... params) {
					// doInBackground  是子執行緒執行耗時的操作
					return result;
				}
				
				@Override
				protected void onProgressUpdate(Integer[] values) {
					//主執行緒中執行,進度改變時的回撥
				};
				@Override
				protected void onPostExecute(Void result){
					//放在主執行緒中,執行完成的回撥,doInBackground結束後呼叫這個方法
				}
			}.execute(0,100);
		}
關於進度的更新,在執行doInBackground方法時可以使用 publishProgress(result)方法把進度傳遞出去,在onProgressUpdate方法中接收,之後在UI中顯示出來。