【问题标题】:Cancel AsyncTask when user presses back button当用户按下返回按钮时取消 AsyncTask
【发布时间】:2010-11-01 18:55:03
【问题描述】:

我有一个 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 */
   }
};

(或与 OnCancelListener 类似的东西),但这根本不会被调用。

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

【问题讨论】:

标签: android android-asynctask progressdialog cancel-button


【解决方案1】:

我还没有测试过,但是试试这样的:

    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。
【解决方案2】:

我想你正在寻找这个:onCancelled()

http://developer.android.com/reference/android/os/AsyncTask.html

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多