Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android AsyncTask 詳細解析

Android AsyncTask 詳細解析

編輯:關於Android編程

結構

繼承關系

public abstract class AsyncTask extends Object

java.lang.Object

android.os.AsyncTask

類概述

AsyncTask能夠適當地、簡單地用於 UI線程。 這個類不需要操作線程(Thread)就可以完成後台操作將結果返回UI。

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

用法

AysncTask必須被繼承使用。子類至少覆蓋一個方法 (doInBackground(Params...)),最經常覆蓋另一個(onPostExecute(Result).)下面是一個子類的例子:

\

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

\

<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHAgYWxpZ249"left">AsyncTask的泛型類型

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

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

2. Progress,後台任務執行的百分比

3. Result,後台計算的結果類型

在一個異步任務裡,不是所有的類型總被用。假如一個類型不被使用,可以簡單地使用 Void類型:

\

4個步驟

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

1.onPreExecute(),在UI線程上調用任務後立即執行。這步通常被用於設置任務,例如在用戶界面顯示一個進度條。

2.doInBackground(Params...),後台線程執行onPreExecute()完後立即調用,這步被用於執行較長時間的後台計算。異步任務的參數也被傳到這步。計算的結果必須在這步返回,將傳回到上一步。在執行過程中可以調用publishProgress(Progress...)來更新任務的進度。

3.onProgressUpdate(Progress...),一次呼叫 publishProgress(Progress...)後調用 UI線程。執行時間是不確定的。這個方法用於當後台計算還在進行時在用戶界面顯示進度。例如:這個方法可以被用於一個進度條動畫或在文本域顯示記錄。

4.onPostExecute(Result), 當後台計算結束時,調用 UI線程。後台計算結果作為一個參數傳遞到這步。

線程規則

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

· 任務實例必須創建在 UI線程

· execute(Params...)必須在 UI線程上調用

· 不要手動調用onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)

· 這個任務只執行一次(如果執行第二次將會拋出異常)

內部類

enum AsyncTask.Status

表示任務的當前狀態

構造函數

public AsyncTask ()

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

公共方法

public final boolean cancel (boolean mayInterruptIfRunning)

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

參數

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

返回值

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

參見

isCancelled()

onCancelled()

public final AsyncTask 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 超時的時間單位

返回值

計算結果

異常

CancellationException 如果計算取消

ExecutionException 如果計算拋出異常

InterruptedException 當等待時當前線程拋出異常

TimeoutException 等待時間超時

public final AsyncTask.Status getStatus ()

獲得任務的當前狀態

返回值

當前狀態

public final boolean isCancelled ()

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

返回值

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

參見

cancel(boolean)

受保護方法

protected abstract Result doInBackground (Params... params)

覆蓋此方法在後台線程執行計算,此方法中的參數是此任務的execute(Params...)方法的調用這傳遞的參數,此方法可以調用publishProgress(Progress...)UI線程中來更新數據

參數

params 此任務的參數

返回值

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

參見

onPreExecute()

onPostExecute(Result)

publishProgress(Progress...)

protected void onCancelled ()

此方法在UI線程中當cancel(boolean) 被調用後調用

參見

cancel(boolean)

isCancelled()

protected void onPostExecute (Result result)

此方法在UI線程中doInBackground(Params...)。方法調用之後調用,此方法中的參數的值是doInBackground(Params...)的返回值或者當此任務已經被取消或有異常發生時此參數值為空null

參數

result 由doInBackground(Params...)計算出的操作的結果。

參見

onPreExecute()

doInBackground(Params...)

protected void onPreExecute ()

在方法doInBackground(Params...)調用之前調用

參見

onPostExecute(Result)

doInBackground(Params...)

protected void onProgressUpdate (Progress... values)

該方法在UI線程中publishProgress(Progress...)被調用之後調用,該方法中的參數values是已經被傳遞到ppublishProgress(Progress...)中的參數

參數

values 進度表示值

參見

publishProgress(Progress...)

doInBackground(Params...)

protected final void publishProgress (Progress... values)

當調用doInBackground(Params...)在後台執行計算時會調用該方法,每當在UI線程中調用此方法時將觸發onProgressUpdate(Progress...)方法的執行

參數

values 將進度值更新到UI

參見

onProgressUpdate(Progress...)

doInBackground(Params...)


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved