Android AsyncTask 簡單用法

RegPoate 8年前發布 | 4K 次閱讀 Java AsyncTask

簡介

AsyncTask 是一個輕量級的異步處理類。使用是需繼承自該類。可以方便的執行異步任務并且在將進度顯示在UI上。

注意事項

  • AsyncTask只適合處理輕量級的任務即耗時幾秒或者幾十秒的任務。如果需要長時間執行后臺異步任務,可以查閱java.util.concurrent 包中的 Executor, ThreadPoolExecutor 以及 FutureTask等內容。

  • 使用AsyncTask必須創建一個類繼承自AsyncTask,至少需要重寫doInBackground(params...) 方法執行具體的操作。一般會重寫onPostExecute(Result)方法用來執行后臺操作以及對后臺運行結果進行處理。

AsyncTask 執行的4個階段

  • step1

    onPreExecute() 在主線程(UI線程)調用,用于開始任務前的初始化工作。例如顯示一個進度條。

  • step2

    doInBackground(Params...) 后臺線程調用,onPreExecute() 執行完之后立即執行。用于執行耗時較長的操作。并且提供publishProgress(Progress...)方法用于顯示進度信息。

  • step3

    onProgressUpdate (Progress...)在主線程(UI線程)調用,用于響應publishProgress(Progress...)方法。

  • step4

    onPostExecute(Result) 在主線程調用,doInBackground(Params...)方法執行完后立即調用。Result是doInBackground(Params...)方法的返回值。

AsyncTask使用方法

  • 構造函數 可以自定義public類型的構造函數,和普通的類沒有差別。
  • AsyncTask每次使用必須new 一個對象,并且執行excute(Params...)方法。Params參數解釋見下文。

參數解釋

這三個參數會在類繼承時被指定,參數都使用泛型構造。

  • Params 后臺線程所需要的參數列表,與構造類時所指定的第一個參數類型匹配。
  • Progress 后臺線程執行過程中發送的進度信息, 與構造類時所指定的第二個參數類型匹配。
  • Result 后臺線程執行完后的返回值, 與構造類時所指定的第三個參數類型匹配。

代碼示例(來自Android Developer)

  • Class definition
    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");

    }

    }

  • Use
    new DownloadFilesTask().execute(url1, url2, url3);

更多用法 AsyncTask AndroidDeveloper

 本文由用戶 RegPoate 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!