AsyncTask------異步任務訪問網絡數據

 

AsyncTask是抽象類,AsyncTask中定義了三種泛型類型< Params,Progress,Result>。網絡

* Params 啓動任務執行的輸入參數,好比HTTP請求的URL。spa

* Progress 後臺任務執行的百分比。線程

* Result 後臺執行任務最終返回的結果,好比String,Integer等。後臺

 

實現AsyncTask中定義的5個方法:泛型

一、onPreExecute(), 該方法將在執行實際的後臺操做前被UI 線程調用。能夠在該方法中作一些準備工做,如在界面上顯示一個進度條,或者一些控件的實例化,這個方法能夠不用實現。date

2doInBackground(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傳入的參數。

相關文章
相關標籤/搜索