带有进度对话框取消的 Android AsyncTask

Posted

技术标签:

【中文标题】带有进度对话框取消的 Android AsyncTask【英文标题】:Android AsynTask with progress dialog cancel 【发布时间】:2011-07-27 16:44:28 【问题描述】:

在我的 android 应用程序中,我使用带有进度对话框的 AsynTask(请等待登录 ...)通过我的网页登录用户(AsynTask 中的 Web 服务功能)

当用户点击设备上的后退按钮时,我想关闭进度对话框并取消 AsynTask。

我找不到那种中断 AsynTask 的例子。我阅读了关于取消(布尔),但我不知道如何从 UI 调用。

谁能给我意见。

谢谢

【问题讨论】:

【参考方案1】:
    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 方法执行整理代码。

【讨论】:

【参考方案2】:
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() 方法来完成。

【讨论】:

在这种情况下,我认为这比我的解决方案更好。删除我的答案。 这不会处理对话框中的取消,当用户在显示时单击屏幕上的其他位置时可能会发生这种情况。似乎 sharic19 的答案更合乎逻辑,因为它在对话框本身上设置了 OnCancelListener 你不需要 handleOnBackButton();足以设置 progressDialog.setCancelable(true);使其对“后退”按钮做出反应。【参考方案3】:

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

dialog.setCancelable(true);

您必须覆盖 onBackPressed 以关闭 ProgressDialog 并取消 AsyncTask

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

【讨论】:

【参考方案4】:

我发现后退按钮事件被“显示”的 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 更加简洁。解雇侦听器可以取消任务。无需保留对对话框的引用,这是我们需要监听用户取消的唯一地方。

【讨论】:

以上是关于带有进度对话框取消的 Android AsyncTask的主要内容,如果未能解决你的问题,请参考以下文章

java 带有正面,负面和取消侦听器的Android对话框。

Android:取消异步任务

android对话框加“确定”,“取消”两个按钮,却总只显示一个怎么回事?

Android Java如何从服务中消除进度问题

Android 常见对话框

如何关闭带有异步任务的进度对话框并避免“您的活动是不是运行错误?”