我的数据是从互联网加载的,所以我使用了AsynTask()。 execute()方法首先打开progressDialog,然后在后台加载数据。但是,有时加载数据需要很长时间,所以我想取消加载,这就是问题所在:当我点击后退按钮时,对话框会解除,但在完成后台加载后,它会开始做任何事情应该在加载后做,例如开始新的意图。 有什么方法可以正确取消加载???
new GridViewAsyncTask().execute();
public class GridViewAsyncTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog myDialog;
@Override
protected void onPreExecute() {
// show your dialog here
myDialog = ProgressDialog.show(ScrollingTab.this, "Checking data",
"Please wait...", true, true);
}
@Override
protected Void doInBackground(Void... params) {
// update your DB - it will run in a different thread
loadingData();
return null;
}
@Override
protected void onPostExecute(Void result) {
// hide your dialog here
myDialog.dismiss();
}
答案 0 :(得分:2)
如果要停止任务,请致电mAsycntask.cancel();
。
然后
@Override
protected Void doInBackground(Void... params) {
// update your DB - it will run in a different thread
/* load data */
....
if (isCancelled())
return;
/* continue loading data. */
return null;
}
文档: http://developer.android.com/reference/android/os/AsyncTask.html#isCancelled()
答案 1 :(得分:1)
声明您的AsyncTask,如asyncTask = new GridViewAsyncTask();
然后像之前那样执行它(asyncTask.execute();)并取消它:
asyncTask.cancel();
将onCanceled
方法添加到AsyncTask类并覆盖它。也许要显示日志或其他内容!
@Override
protected Void onCancelled () {
// Your Log here. Will be triggered when you hit cancell.
}