当用户按下按钮时取消AsyncTask

Kas*_*ers 5 android progressdialog cancel-button android-asynctask

我有一个AsyncTask,我在onPreExecute中显示ProgressDialog,并在onPostExecute中再次隐藏它,类似于

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

   protected onPreExecute() {
      dialog.show();
   }
   protected onPostExecute() {
      dialog.hide();
   }
};
Run Code Online (Sandbox Code Playgroud)

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

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

setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
   /* do something */
   }
};
Run Code Online (Sandbox Code Playgroud)

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

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

dan*_*h32 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);
        }
};
Run Code Online (Sandbox Code Playgroud)