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等待結束,由使用者控制結束流程;