Android中AsyncTask的處理后臺耗時操作
tv=(TextView)findViewById(R.id.tv);
download = (Button)findViewById(R.id.download);
download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DownloadTask dTask = new DownloadTask();
dTask.execute(100);
}
});
}
class DownloadTask extends AsyncTask
//后面尖括號內分別是參數(例子里是線程休息時間),進度(publishProgress用到),返回值 類型
@Override
protected void onPreExecute() {
//第一個執行方法
super.onPreExecute();
}
@Override
protected String doInBackground(Integer... params) {
//第二個執行方法,onPreExecute()執行完后執行
for(int i=0;i=100;i++){
pb.setProgress(i);
publishProgress(i);
try {
Thread.sleep(params[0]);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return 執行完畢;
}
@Override
protected void onProgressUpdate(Integer... progress) {
//這個函數在doInBackground調用publishProgress時觸發,雖然調用時只有一個參數
//但是這里取到的是一個數組,所以要用progesss[0]來取值
//第n個參數就用progress[n]來取值
tv.setText(progress[0]+%);
super.onProgressUpdate(progress);
}
@Override
protected void onPostExecute(String result) {
//doInBackground返回時觸發,換句話說,就是doInBackground執行完后觸發
//這里的result就是上面doInBackground執行后的返回值,所以這里是執行完畢
setTitle(result);
super.onPostExecute(result);
}
}
}
評論