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
//后面尖括號內(nèi)分別是參數(shù)(例子里是線程休息時間),進度(publishProgress用到),返回值 類型
@Override
protected void onPreExecute() {
//第一個執(zhí)行方法
super.onPreExecute();
}
@Override
protected String doInBackground(Integer... params) {
//第二個執(zhí)行方法,onPreExecute()執(zhí)行完后執(zhí)行
for(int i=0;i=100;i++){
pb.setProgress(i);
publishProgress(i);
try {
Thread.sleep(params[0]);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return 執(zhí)行完畢;
}
@Override
protected void onProgressUpdate(Integer... progress) {
//這個函數(shù)在doInBackground調(diào)用publishProgress時觸發(fā),雖然調(diào)用時只有一個參數(shù)
//但是這里取到的是一個數(shù)組,所以要用progesss[0]來取值
//第n個參數(shù)就用progress[n]來取值
tv.setText(progress[0]+%);
super.onProgressUpdate(progress);
}
@Override
protected void onPostExecute(String result) {
//doInBackground返回時觸發(fā),換句話說,就是doInBackground執(zhí)行完后觸發(fā)
//這里的result就是上面doInBackground執(zhí)行后的返回值,所以這里是執(zhí)行完畢
setTitle(result);
super.onPostExecute(result);
}
}
}
評論