当用户按下返回按钮时取消AsyncTask

5

我有一个AsyncTask,在其中我在onPreExecute中显示一个ProgressDialog,然后在onPostExecute中隐藏它,就像这样:

final class UploadTask extends AsyncTask {
   ProgressDialog dialog = new ProgressDialog(...);

   protected onPreExecute() {
      dialog.show();
   }
   protected onPostExecute() {
      dialog.hide();
   }
};

对话框是可取消的,当我在执行AsyncTask期间按下取消按钮时,它确实会消失。

当发生这种情况时,我想运行一些代码来取消AsyncTask(现在,即使ProgressDialog消失了,AsyncTask仍然继续运行并最终完成)。 我尝试从ProgressDialog派生自己的类,然后执行

setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
   /* do something */
   }
};

当我使用AsyncTask并显示一个ProgressDialog时,我需要用户能够取消任务。我使用了(on something similar with an OnCancelListener),但这个方法似乎从未被调用。

有什么想法吗?我只是需要一种机制让用户在ProgressDialog显示的同时取消正在运行的AsyncTask。


一个取消异步任务的示例 http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ - Deepak Swami
2个回答

14

我没有测试过这个,但尝试以下方法:

    final class UploadTask extends AsyncTask implements OnDismissListener{
       ProgressDialog dialog = new ProgressDialog(...);

       protected onPreExecute() {
           dialog.setOnDismissListener(this);
          dialog.show();
       }
       protected onPostExecute() {
          dialog.hide();
       }

       @Override
        public void onDismiss(DialogInterface dialog) {
            this.cancel(true);
        }
};

我决定将ProgressDialog的初始化移动到我的构造函数中,出于某种奇怪的原因,这样做起作用了。你的方法也可能有效,我还没有尝试过。无论如何,如果有人遇到同样的问题:尝试调整ProgressDialog初始化的时间点。 - Kasper Peeters

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接