close

今天我們就來說說 AsyncTask 該怎麼用

還有他後面的 < void, void, void > 三個參數的作用吧!! 

我們就從解說官方的範例開始吧,code 如下:

private class DownloadFilesTask extends AsyncTask {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

 

先說後面的三個參數分別代表

傳入參數,處理參數,回傳值

以上方範例 code 的對應就是

URL,Integer,Long

 

當我們 new DownloadFilesTask().execute(url1, url2, url3);

此時會先進入 onPreExecute()做事前準備工作 (此範例沒有)

然後再進 doInBackground() 做事情

而 doInBackground(傳入參數) 的參數就是剛剛的三個 url123

 

在 doInBackground() 的處理過程中

可以用 publishProgress(處理參數) 來呼叫 onProgressUpdate()

onProgressUpdate(處理參數) 會根據參數來做事情或更新 UI 畫面,此範例為更新下載進度

等 doInBackground() 的處理完後

會將結果傳回 onPostExecute(回傳值) 來做最後的處理

 

這裡要注意的是 onPostExecute() 和 onProgressUpdate() 是在 UI Thread 的

所以若有畫面要處理可以在這兩個地方著手喔。

 

參考資料:

官網 https://developer.android.com/reference/android/os/AsyncTask

 

 

 

 

 


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 顏澤偉 的頭像
    顏澤偉

    Willy's Fish教學筆記』

    顏澤偉 發表在 痞客邦 留言(0) 人氣()