Android:取消异步任务

标签 android asynchronous task back

我使用异步任务上传图像并获得一些结果。

上传图片时,我看到一个进度对话框,用 onPreExecute() 方法编写,如下所示:

    protected void onPreExecute() { 
         uploadingDialog = new ProgressDialog(MyActivity.this); 
         uploadingDialog.setMessage("uploading"); 
         uploadingDialog.setCancelable(true);
         uploadingDialog.show();
    }

好的,当我按下后退按钮时,显然对话框会因为 setCancelable(true) 而消失。

但是(显然)异步任务并没有停止。

那么我该如何解决这个问题?当我按下后退按钮时,我想取消对话框和异步任务。有什么想法吗?

最佳答案

来自 SDK:

Cancelling a task

A task can be cancelled at any time by invoking cancel(boolean). Invoking this method will cause subsequent calls to isCancelled() to return true.

After invoking this method, onCancelled(Object), instead of onPostExecute(Object) will be invoked after doInBackground(Object[]) returns.

To ensure that a task is cancelled as quickly as possible, you should always check the return value of isCancelled() periodically from doInBackground(Object[]), if possible (inside a loop for instance.)

所以你的代码适合对话监听器:

uploadingDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
    public void onCancel(DialogInterface dialog) {
        myTask.cancel(true);
        //finish();
    }
});

现在,正如我之前在 SDK 中提到的,您必须检查任务是否被取消,为此您必须检查 onPreExecute() 方法中的 isCancelled()。 p>

例如:

if (isCancelled()) 
    break;
else
{
   // do your work here
}

关于Android:取消异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6039158/

相关文章:

node.js - Puppeteer 下拉菜单不是选择类型

c# - SerializeObject 永远等待

c - Linux内核中进程的年龄

Windows 窗体应用程序作为计划任务

Android 设备未出现在 Eclipse 中

android - 如何将设备连接到我的 Android firebase 数据库

javascript - preact 异步路由器找不到 block

java - 如何解决android studio中隐藏标题栏的问题?

android - 关闭对话框 Android

c# - Process.WaitForExit() 异步