正文
一、結構
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,如需轉載請自行聯系原作者