当用户按下后退按钮时取消 AsyncTask

2024-01-02

我有一个 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。


我还没有测试过这个,但尝试这样的事情:

    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);
        }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当用户按下后退按钮时取消 AsyncTask 的相关文章

随机推荐