android 的api文檔學習翻譯線程AsyncTask

?一、繼承自java.lang.Object,包名android.os.AsyncTask<Params,Progress,Result>

二、public abstract class AsyncTask<Params,Progress,Result> extends Object

AsyncTask可以適當和簡單的調用UI線程。這個類可以在后臺執行,輸出結果到UI線程而不用操作線程或者handler類

定義一個異步線程,運行于后臺線程且結果輸出到UI線程。定義一個異步線程需要三個通用的類型,Params,Progress和Result,四個步驟,beigin ,doInBackground,processProgress 和end.

三、使用Usage

AsyncTask必須通過繼承來使用。子類至少要重寫一個方法(doInBackground(...)),但是大多數情況下還需要重寫第二個方法(onPostExecute(Result))

下面是一個實例子類

private class DownloadFilesTask extends AsyncTask<URL,Interger,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("Download"+result+"bytes");

}

}

一旦創建好,一個線程類執行非常簡單;

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

四、AsyncTask的通用參數

異步線程使用的三個通用參數如下:

1、Params,在執行程序時,發送給線程的參數類型

2、Progress,在后臺程序執行期間輸出的進度條控件

3、Result,后臺程序的輸出結果。

不是所有的參數都會被異步線程使用。對于不適用的參數,使用Void。

private class MyTask extends AsyncTask

五、The 4steps 四個步驟

當一個異步線程被執行,程序要經過四個步驟

1、onPreExecute(),在線程執行后立即調用UI線程。這步通常用來創建程序,例如在窗口創建一個進度條。

2、doInBackground(Params...)在方法onPreExecute()執行完后立即在后臺線程調用。這步通常用來后臺程序的執行,可能需要花費一定的時間。異步線程參數在此時被傳遞。運算的結果在該步驟被返回,在最后的步驟中被傳遞回去。該步驟頁可以使用publishProgress(Progress...)展示一個或者多個進度條。這些值被出書在UI線程,在onProgressUpdate(Progress..)方法中

3、onProgressUpdate(Porgress...),在publishPorgress(Progress..)被調用后立即在UI線程調用。執行時間沒有定義。在后臺程序計算的過程中,這個方法可以展示在界面上的任何類型的進度條。例如,可以用來展示進度條動畫和在文本框展示日志。

4、onPostExecute(Result),在后臺程序執行完后,立即被UI線程調用。后臺的計算結果此時作為參數被傳遞。

六、線程規則Threading rules

為了讓你的淚更好的工作你的淚必須遵循下列的線程規則:

.異步線程實例必須在UI線程創建

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

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

.線程只能被執行一次


七、嵌套類AsyncTask.Status:記錄線程的當前數據狀態

八、構造方法AsyncTask()

九、方法摘要

cancle(boolean mayInterruptIfRuning):取消該任務的執行

execute(Params...params):指定參數并執行程序

get():等待,如果需要計算完成,然后檢索其結果

get(long timeout, TimeUnit unit):最多等待到給定的時間,如果需要計算完成,然后檢索其結果。

getStatus():得到當前任務的狀態數據

isCancelled():如果在任務結束前被取消則返回真

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android Handler機制系列文章整體內容如下: Android Handler機制1之ThreadAnd...
    隔壁老李頭閱讀 3,255評論 1 15
  • Android開發者:你真的會用AsyncTask嗎? 導讀.1 在Android應用開發中,我們需要時刻注意保證...
    cxm11閱讀 2,729評論 0 29
  • 在Android中我們可以通過Thread+Handler實現多線程通信,一種經典的使用場景是:在新線程中進行耗時...
    呂侯爺閱讀 2,066評論 2 23
  • 2017年的七月13日,凌晨十二點五十,我沒有任何困意,只是因為我又揭開了自己那一點隱隱的傷。 我不知道他哪里好,...
    妖精軒閱讀 188評論 0 0
  • 牛馬過后,談跑膽顫。心有余悸,雖然走路之類的沒啥影響,但是也再沒跑過了。無奈呀,還有個背靠背的中山馬拉松,本來想放...
    Janetff閱讀 326評論 3 6