Android异步任务与进度对话框取消

17

在我的Android应用程序中,我使用带有进度对话框(“请等待登录中…”)的AsynTask来与我的网页上的用户进行登录(在AsynTask中使用Web服务功能)。

当用户在设备上点击返回按钮时,我希望取消AsynTask并关闭进度对话框。

我找不到这种打断AsynTask的示例。我读到了cancel(boolean)的相关内容,但我不知道如何从UI中调用它。

有人能给我一些想法吗?

谢谢

4个回答

20
    ProgressDialog progressDialog = ProgressDialog.show(ActivityName.this,
            "Title",
            "Message");
    progressDialog.setCancelable(true);
    progressDialog.setOnCancelListener(new OnCancelListener() {

        @Override
        public void onCancel(DialogInterface dialog) {
            // TODO Auto-generated method stub
            // Do something...
        }
    });

setCancelable(true)方法设置对话框是否可通过BACK键取消。您可以通过setOnCancelListener -> onCancel方法执行完成代码。


9
public MyActivity extends Activity {


  private MyAsyncTask task;

  public onCreate() {
     task = new MyAsyncTask(); // MyAsyncTask has a progress dialog and dismiss it
     // in an overrided cancel() method 
     task.execute();
  }

  private void handleOnBackButton() {
     task.cancel(true);
  }

当用户按下返回或主页键时,您只需要调用handleOnBackButton()。 您可以使用onKeyDown()方法来实现。


在这种情况下,我认为这是比我的解决方案更好的解决方案。删除我的答案。 - dbyrne
这段代码无法处理对话框的取消操作,当用户在对话框显示时点击屏幕其他地方时会发生这种情况。sharic19 的答案似乎更合理,因为它在对话框本身上设置了 OnCancelListener。 - bkurzius
你不需要使用 handleOnBackButton();,只需设置 progressDialog.setCancelable(true); 就足以使其对返回按钮做出反应。 - Alex

5

您只需将ProgressDialog设置为可取消,当您点击“返回”按钮时,它将消失。就像这样:

dialog.setCancelable(true);

您需要重写onBackPressed方法,以便同时取消ProgressDialog和AsyncTask。

@Override
public void onBackPressed() {
YourAsyncTaskObject.cancel(true);
YourProgressDialog.dismiss();
return;
}

1
我发现返回按钮事件被ProgressDialog消耗掉了,因此Activity无法对取消操作进行响应。我不得不为对话框添加一个监听器:
mProgress = ProgressDialog
        .show(this, getText(R.string.progress_title),
        getText(R.string.progressing), true, true,
        new OnCancelListener() {
            public void onCancel(DialogInterface pd) {
                handleOnBackButton();
            }
        });         

没事了。

我发现使用Activity的对话框管理更加清晰,并且在onCreateDialog期间添加一个onDismissListener。dismiss监听器可以取消任务。无需保留对话框的引用,这是我们需要监听用户取消的唯一位置。


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