天天看點

Android 中文 API (101) —— AsyncTask

正文

  一、結構

public abstract class AsyncTask extends Object

java.lang.Object

android.os.AsyncTask<Params, Progress, Result>

  二、類概述

  AsyncTask能夠适當地、簡單地用于 UI線程。 這個類不需要操作線程(Thread)就可以完成背景操作将結果傳回UI。

  異步任務的定義是一個在背景線程上運作,其結果是在 UI線程上釋出的計算。 異步任務被定義成三種泛型類型:Params,Progress和 Result;和四個步驟: begin , doInBackground,processProgress 和end。

  三、用法

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {

     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));

         }

         return totalSize;

     }

     protected void onProgressUpdate(Integer... progress) {

         setProgressPercent(progress[0]);

     protected void onPostExecute(Long result) {

         showDialog("Downloaded " + result + " bytes");

 }

     一旦建立,一個任務執行起來就非常簡單:

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

  四、AsyncTask的泛型類型 

  這三個類型被用于一個異步任務,如下:

  1. Params,啟動任務執行的輸入參數

  2. Progress,背景任務執行的百分比

  3. Result,背景計算的結果類型

 private class MyTask extends AsyncTask<Void, Void, Void> { ... }

  五、4個步驟

    當一個異步任務被執行,任務經過四各步驟:

  六、線程規則 

  有一些線程規則必須去遵守,這個類才會正确的工作:

    任務執行個體必須建立在 UI線程

    這個任務隻執行一次(如果執行第二次将會抛出異常)

  七、内部類

      enum       AsyncTask.Status  

  表示任務的目前狀态

  八、構造函數

        public AsyncTask ()

  建立一個新的異步任務。這個構造函數必須在UI線程上調用。

  九、公共方法

  public final boolean cancel (boolean mayInterruptIfRunning)

  嘗試取消這個任務的執行,如果這個任務已經結束或者已經取消或者不能被取消或者某些其他原因,那麼将導緻這個操作失敗,當調用此方法時,此方法執行成功并且這個任務還沒有執行,那麼此任務将不再執行。如果任務已經開始,這時執行此操作傳入的參數mayInterruptIfRunning為true,執行此任務的線程将嘗試中斷該任務。

  參數

  mayInterruptIfRunning 如果為true則正在執行的線程将會中斷,如果false,則會允許正在執行的任務線程執行完畢。

  傳回值

                       如果此任務不能取消傳回false,如果已經正常的執行完畢,傳回true

  參見

  public final AsyncTask<Params, Progress, Result> execute (Params... params)

  用指定的參數來執行此任務,這個方法将會傳回此任務本身,是以調用者可以擁有此任務的引用。此方法必須在UI線程中調用

  params  任務參數

  AsyncTask的執行個體

  異常

  IllegalStateException       如果getStatus()傳回的是RUNNING或者FINISHED

  public final Result get ()

  等待計算結束并傳回結果

  計算結果

  CancellationException    如果計算取消

  ExecutionException         如果計算抛出異常

  InterruptedException     當等待時目前線程抛出異常

  public final Result get (long timeout, TimeUnit unit)

  等待計算結束并傳回結果,最長等待時間為:timeOut(逾時時間).

  timeout 計算等待逾時時間

  unit          逾時的時間機關

  TimeoutException 等待時間逾時

  public final AsyncTask.Status getStatus ()

  獲得任務的目前狀态

               目前狀态

  public final boolean isCancelled ()

  如果在任務正常結束之前取消任務成功則傳回true,否則傳回false

                            如果任務正常結束之前取消任務成功傳回true。

                  參見

  十、受保護方法 

           protected abstract Result doInBackground (Params... params)

  params  此任務的參數

  傳回一個由此任務子類定義的結果 Result

                 參見

  protected void onCancelled ()

  protected void onPostExecute (Result result)

  protected void onPreExecute ()

  protected void onProgressUpdate (Progress... values)

             參數

  values     進度表示值

  protected final void publishProgress (Progress... values)

  values     将進度值更新到UI

  十一、補充 

           文章精選

  十二、公告

    内部類、内部接口由于内容較少均不再單獨釋出。

結束

  随着春節的結束,翻譯組工作重新回到正軌,感謝大家的關注與支援!

——————————————————————————————————————————

AsyncTask.Status

public static final enum AsyncTask.Status extends Enum<E extends Enum<E>>

java.lang.Enum<E extends java.lang.Enum<E>>

         android.os.AsyncTask.Status

    标志任務的目前狀态,每個狀态在任務的生命周期中隻會出現一次。

  三、枚舉值

  public static final AsyncTask.Status FINISHED

  public static final AsyncTask.Status PENDING

  标志任務還沒有執行

  public static final AsyncTask.Status RUNNING

  标志任務正在執行

本文轉自over140 51CTO部落格,原文連結:http://blog.51cto.com/over140/582388,如需轉載請自行聯系原作者

繼續閱讀