天天看點

AsyncTask簡單入門關系:概述:用法:The 4 steps:Tips:

java.lang.object

   ?    android.os.asynctask<params, progress, result>

asynctask是android提供的輕量級異步類;它在背景線程處理耗時的操作然後可以将處理的結果傳回給ui線程處理。由于它不涉及到使用thread和handler是以簡單易用。

首先上一段android developer的代碼:

<code></code>

 private class downloadfilestask extends asynctask&lt;url,

integer, long&gt; {

     protected long doinbackground(url... urls) {

         int count = urls.length;

         long totalsize = 0;

         for (int i = 0; i &lt; 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");

}

//執行方式

//new downloadfilestask().execute(url1, url2, url3);

下面我們看一下具體的用法。

需要注意的是asynctask的三中泛型類型

        params

啟動任務執行的輸入參數,比如http請求的url。

        progress 背景任務執行的百分比。

        result 背景執行任務最終傳回的結果,比如string。 

讓我們看一下doinbackground這個方法。

protected abstract result doinbackground (params... params)

它接收類型為params的若幹參數,然後傳回類型為result的結果。

protected void onpostexecute (result result)

它在doinbackground之後被執行,參數就是doinbackground傳回的結果。

在asynctask被execute之前被執行,一般是做一些準備工作

在onpreexecute()執行完之後執行,背景線程執行耗時操作

在ui線程中執行。在 publishprogress(progress...)被調用之後執行

在ui線程中執行,在doinbackground()執行之後執行

1.asynctask需要在ui線程中加載

2.建構asynctask的子類需要在ui線程中

3.execute方法需要在ui線程中被調用

4.對于"the 4 steps"中的四個函數不要自己手動去調用

5.每個task對象隻能被execute一次,不然會報異常