天天看點

AsynTask異步任務的使用(再也忘不了了)

AsynTask封裝了子線程,可以直接用來處理耗時操作。

AsyncTask<Params,Progress,Result>是個抽象類,使用時需要繼承這個類,然後調用execute()方法。

使用三闆斧:

1建立AsyncTask的子類,并為三個範型Params,Progress,Result(巧記:啟動任務,任務執行中,任務執行完)指定類型。不需要指定置為void。

2根據需要實作下列方法,其中doInBackground(Params...)必須實作;

onPreExecute() doInBackground() onProgressUpdate() onPostExecute()[doInBackground()執行完之後自動執行onPostExecute(),并将 doInBackground()的傳回值傳回該方法]

3調用子類執行個體的execute()執行耗時操作

注意:必須在主線程中建立AsyncTask執行個體并調用execute() 

解釋:

注意繼承時需要設定三個參數Params,Progress和Result的範型,如AsyncTask<Void,Inetger,Void>:

  • Params是指啟動任務執行execute()傳入的參數類型和doInBackgound()時傳入的參數類型
  • Progress是指更新進度時傳遞的參數類型,即publishProgress()和onProgressUpdate()的參數類型
  • Result是指doInBackground()的傳回值類型

用一個進度條顯示下載下傳一幅圖檔為例形象的說明使用的方法:

  • doPreExecute()負責在下載下傳開始之前顯示一個進度條
  • doInBackground() 在背景運作,處理耗時操作,必須要實作的方法,完成實際的下載下傳;在此方法中可以調用publishProgress() 更新進度,給onProgressUpdate()傳遞進度參數。
  • onProgressUpdate() 更新進度,在publishProgress()調用之後被調用,負責随着下載下傳進度的改變更新進度條的進度值。
  • onPostExecute()負責下載下傳完成後将下載下傳的内容顯示出來