AsyncTask是抽象類,AsyncTask中定義了三種泛型類型< Params,Progress,Result>。網絡
* Params 啓動任務執行的輸入參數,好比HTTP請求的URL。spa
* Progress 後臺任務執行的百分比。線程
* Result 後臺執行任務最終返回的結果,好比String,Integer等。後臺
實現AsyncTask中定義的5個方法:泛型
一、onPreExecute(), 該方法將在執行實際的後臺操做前被UI 線程調用。能夠在該方法中作一些準備工做,如在界面上顯示一個進度條,或者一些控件的實例化,這個方法能夠不用實現。date
2、doInBackground(Params...), 將在onPreExecute 方法執行後立刻執行,該方法運行在後臺線程中。這裏將主要負責執行那些很耗時的後臺處理工做。能夠調用 publishProgress方法來更新實時的任務進度。該方法是抽象方法,子類必須實現。請求
三、onProgressUpdate(Progress...),在publishProgress方法被調用後,UI 線程將調用這個方法從而在界面上展現任務的進展狀況,例如經過一個進度條進行展現。程序
4、onPostExecute(Result), 在doInBackground 執行完成後,onPostExecute 方法將被UI 線程調用,後臺的計算結果將經過該方法傳遞到UI 線程,而且在界面上展現給用戶。方法
五、onCancelled(),在用戶取消線程操做的時候調用。在主線程中調用onCancelled()的時候調用。數據
執行流程:
1.onPreExecute()
2.doInBackground()-->onProgressUpdate()
3.onPostExecute()
注意:AsyncTask是抽象類,子類必須實現抽象方法doInBackground(Params... p) ,在此方法中實現任務的執行工做,好比鏈接網絡獲取數據等。一般還應該實現onPostExecute(Result r) 方法,由於應用程序關心的結果在此方法中返回。其餘3個能夠不實現。還需注意的是AsyncTask必定要在主線程中建立實例。
額外:doInBackground方法的返回值必須和onPostExecute的參數對應,這兩個參數在AsyncTask聲明的泛型參數列表中指定。
該方法泛型解釋:第一個爲 doInBackground接受的參數,第二個爲顯示進度的參數,第三個爲doInBackground返回和onPostExecute傳入的參數。