標籤:android asynctask 非同步任務
一、為什麼要使用非同步任務類?
Handler模式需要為每一個任務建立一個新的線程,任務完成後通過Handler對象向UI線程發送訊息,完成介面的更新,這種方式對整個介面的控制非常精細。但是也有缺點,例如代碼臃腫,所以為了簡化操作,Android 1.5 sdk 提供了一個工具類 AsyncTask(非同步任務類),使得建立非同步任務變的更加簡單。
二、非同步任務類的實現
非同步類實現計數示範過程:
首先在 主Activity檔案中:(主Activity用來解析程式的第一個介面)
1. 建立非同步類任務的對象,並給非同步類的構造傳遞一個文字物件的引用,這樣在非同步任務中能操作這個文字框;
2. 使用非同步類對象的引用調用 execute(Params .. Params)方法,執行非同步任務。也即進入了我們建立的非同步任務中去執行;
說明:execute()可以傳遞多個參數,傳遞的參數類型受非同步類的第一個參數類型決定,如果非同步類的第一個參數類型為Integer類型,那麼execute傳遞的參數就必須是整型的,以此類推;在非同步類用doInBackground(Integer ... params)方法來接收execute傳遞的參數,這種參數的寫法表示,用來接收多個傳遞來的參數,都儲存在數組params[ ]中,params[0]表示傳遞的第一個參數,以此類推;
主Activity代碼如下:
進入了我們建立的非同步任務中:
首先介紹一下這個非同步任務類的建立及相應參數說明: a. 在建立AsyncTask類(非同步任務類)的時候,要設定資料類型;(稱為Android的泛型程式設計) 參數說明: b. 通俗說一下參數: 第一個參數的類型,就是我們在執行execute()方法時要傳遞的參數類型,還有接收該參數的方法doInBackground()的參數類型保持一致; 第二個參數的類型,就是onProgressUpdate(..)方法接收publicProgress()方法傳遞資料對應的類型; 第三個參數的類型,就是接收doInBackground()方法的返回值的類型;
3. 在execute方法執行後,也即啟動了非同步任務,onPreExecute()方法立即被執行;
4. 在onPreExecute()執行完成後,立即執行doInBackground()方法; 該方法的說明: a. 該方法被子線程調用; b. 將耗時的操作放在該方法中; c. 在該方法中,通過非同步類的對象調用publishProgress()該方法,要求系統自動調用onProgressUpdate()方法;類似handle的用法; d. 該方法的返回值,賦值給了類的第三個參數Result;
5. 由於上面調用了publishProgress()該方法,會要求系統的UI主線程自動調用onProgressUpdate()方法; a. 該方法被UI主線程調用;
非同步任務:
非同步任務實現列表的重新整理:
實現代碼:
Android非同步任務類分析