一个比较完整的自定义AsyncTask写成如下:
class DownloadTask extends AsyncTask<Void, Integer, Boolean> {
@Override
protected void onPreExecute() {
progressDialog.show(); //显示进度对话框
}
@Override
protected Boolean doInBackground(Void...params) {
try {
while (true) {
int downloadPercent = doDownload(); //这是一个虚构的方法
publishProgress(downloadPercent);
if (downloadPercent >= 100) {
break;
}
}
} catch (Exception e) {
return false;
}
return true;
}
@Override
protected void onProgressUpdate(Integer...values) {
//在这里更新下载进度
progressDialog.setMessage("Downloaded" + values[0] + "%");
}
@Override
protected void onPostExecute(Boolean result) {
progressDialog.dismiss(); //关闭进度对话框
//在这提示下载结果
if (result) {
Toast.makeText(context, "Download succeeded", Toast.LENGTH_SHORT).show();
}
}
}
使用AsyncTask的诀窍:在doInBackground()方法中去执行具体的耗时任务,在onProgressUpdate()方法中进行UI操作,在
onPostExecute()方法中执行一些任务的收尾工作。