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()負責下載下傳完成後将下載下傳的内容顯示出來