如何在android中单击“后退”按钮时取消方法的执行

时间:2012-07-22 11:28:27

标签: android button android-asynctask progressdialog

我的数据是从互联网加载的,所以我使用了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();
}

2 个答案:

答案 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.
}