Android中用AsyncTask簡單實現多線程

      一般情況下在android中使用多線程的時候,我們都是在線程運行的時候使用Handler來給主線程傳遞消息,這樣用起來雖然沒什麼不好,但是總感覺有點亂。其實Android已經提供了一個標準的實現多線程的模型,那就是AsyncTask類。
      這個類用起來很簡單,繼承他之後,override幾個方法,然後就可以在線程執行過程中,不斷的將結果通知給ui線程。
      下面簡單講一下用法,看代碼:

Java代碼   收藏代碼
  1. package  cn.infogiga.starter;  
  2.   
  3. import  android.os.AsyncTask;  
  4. import  android.util.Log;  
  5.   
  6. /**  
  7.  * @author chroya  
  8.  *  
  9.  */   
  10. public   class  MyThreads  extends  AsyncTask<Integer, Integer, Integer>{  
  11.   
  12.     @Override   
  13.     protected  Integer doInBackground(Integer... params) {         
  14.         int  p =  0 ;   //計數   
  15.         for ( int  index= 0 ; index<params.length; index++) {  
  16.             int  num = params[index];  
  17.             for ( int  j= 0 ; j<num; j++) {  
  18.                 if (num-j<= 0 ) {  
  19.                     break ;  
  20.                 }  
  21.                 p++;  
  22.                 //通知每一次的數目變化   
  23.                 publishProgress(p);               
  24.             }             
  25.         }  
  26.         //返回總數   
  27.         return  p;  
  28.     }  
  29.   
  30.     @Override   
  31.     protected   void  onProgressUpdate(Integer... progress) {  
  32.         Log.d("onProgressUpdate" "progress:" + progress[ 0 ]);  
  33.     }  
  34.   
  35.     @Override   
  36.     protected   void  onPostExecute(Integer result) {  
  37.         Log.d("onPostExecute" "result:" + result);  
  38.     }     
  39. }  
 

      MyThreads繼承了AsyncTask,他有三個泛型參數,第一個是任務執行所需要的參數類型,第二個是任務的進度表示類型,第三個是進度計算的結果類型。

      我override了三個方法:

doInBackground:就是任務執行的主方法,它會被作爲一個線程運行。

onProgressUpdate:進度更新的時候調用,進度什麼時候更新呢?就是調用了publishProgress方法之後就更新。

onPostExecute:在doInBackground執行並返回之後調用,因爲他需要doInBackground的返回值做參數。  
        怎麼使用它呢?

Java代碼   收藏代碼
  1. new  MyThreads().execute( 10 20 30 );  

         沒錯,就這一句。

          這一句傳遞了三個參數進去,傳遞給了   doInBackground,然後線程開始運行,將三個數開始逐一計數,雖然計數不用這麼麻煩,但是爲了弄明白AsyncTask的運行機制,複雜點反而好。

         結果打印出   onProgressUpdate的   1到60,最後打印出了   onPostExecute的result:60.

發佈了61 篇原創文章 · 獲贊 7 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章