【发布时间】:2018-11-13 23:40:10
【问题描述】:
我的应用使用AsyncTask 下载文件,同时显示带有“取消”按钮的ProgressDialog(我知道它已被弃用)。
根据this,您应该定期检查doInBackground 中的isCancelled(),因为mytask.cancel(true) 不会自行中断doInBackground。
我一开始没有检查就取消了任务,并注意到它仍然停止doInBackground:根据我在按下“取消”按钮之前让它下载多长时间,我在结果文件中看到了不同的大小 - 从只有几 kb 到几 mb - 最终大小约为 9mb。
这怎么可能?你真的不用再打电话给isCancelled()了吗?
我的异步任务:
private class DownloadTask extends AsyncTask<String, String, String> {
protected void onPreExecute() {
progressdialog.setMessage("Preparing Download...");
progressdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressdialog.setProgressNumberFormat(null);
progressdialog.setProgressPercentFormat(null);
progressdialog.setIndeterminate(true);
progressdialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
progressdialog.dismiss();
mytask.cancel(true);
}
});
progressdialog.show();
}
protected String doInBackground(String... bla) {
String error = download();
return error;
}
protected void onProgressUpdate(String... s) {
//....
}
protected void onPostExecute(String s) {
progressdialog.dismiss();
//....
}
【问题讨论】:
标签: android android-asynctask cancellation