代码之家  ›  专栏  ›  技术社区  ›  Kasper Peeters

当用户按下后退按钮时取消异步任务

  •  5
  • Kasper Peeters  · 技术社区  · 15 年前

    我有一个异步任务,在其中,我在onPreExecute中显示一个ProgressDialog,然后在onPostExecute中再次隐藏它,类似于

    final class UploadTask extends AsyncTask {
       ProgressDialog dialog = new ProgressDialog(...);
    
       protected onPreExecute() {
          dialog.show();
       }
       protected onPostExecute() {
          dialog.hide();
       }
    };

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

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

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

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

    2 回复  |  直到 15 年前
        1
  •  14
  •   danh32    15 年前

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

        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);
            }
    };
    
        2
  •  1
  •   Jim    15 年前