AsyncTask完全手冊

張貼日期:2011/7/28 上午 06:01:19

建立一個AsyncTask類別

class AsyncTask_xxx extends AsyncTask {//可以加<doInBackground,onProgressUpdate,doInBackground>設定變數型態

boolean loop = true;//用來決定是否終止,如不使用,就只能用cancel(true)強制終止

int delay_time = 500;//延遲毫秒,如果是循環工作可能需要

int persion = 0;//進度百分比,其實不用也可以,或是設定在doInBackground

Object obj;//要處理的變數或是物件

@Override protected void onPreExecute() {//初始

super.onPreExecute();

//可控UI

this.loop = true;

this.persion = 0;

}//跳到doInBackground

@Override protected Object doInBackground( final Object ... params ) {//正在背景處理,輸入參數1自動成為陣列

//執行工作,不可控UI

this.obj = new Object();//初始化要處理的變數或是物件

while( this.loop ) {//檢查是否被終止

//執行...

this.persion++;//更新百分比,如果需要的話

//更新進度,輸入參數2,跳到onProgressUpdate,又跳回來

this.publishProgress( this.persion );//其實參數另外讀取也可,不一定要在此傳遞

try {

Thread.sleep( this.delay_time );//有需要延遲的時候就這樣

} catch( final Exception e ) {

}

}//跳回來繼續執行中,不可控UI

//工作結束,跳出迴圈

return this.obj;//將操作結果傳給onPostExecute,不在此傳遞也可

}

@Override protected void onCancelled() {//當被操作Cancel(false)的時候觸發

this.loop = false;//設定終止訊號,然後等待doInBackground迴圈那邊收到

super.onCancelled();

}

@Override protected void onProgressUpdate( final Object ... values ) {//進度處理,收到參數2

super.onProgressUpdate( values );

//可控UI...

}//跳回doInBackground

@Override protected void onPostExecute( final Object result ) {//結果處理,收到參數3

super.onPostExecute( result );

//可控UI...

}//正式終止

}

生出一個AsyncTask實體

AsyncTask_xxx at;

at=new AsyncTask_test();

執行

at.execute(參數,參數,參數,參數,參數......);//必須在UI線程

讓他終止

at.cancel( boolean );//boolean =true立刻強制終止, =false等待結束,由使用者控制結束流程;