猿问

Android:取消异步任务

Android:取消异步任务

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

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

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

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

但(显然)异步任务不会停止。

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


一只名叫tom的猫
浏览 594回答 3
3回答

弑天下

来自SDK:取消任务可以通过调用cancel(boolean)随时取消任务。调用此方法将导致后续调用isCancelled()返回true。调用此方法后,将在doInBackground(Object [])返回后调用onCancelled(Object)而不是onPostExecute(Object)。为确保尽快取消任务,应始终定期从doInBackground(Object [])检查isCancelled()的返回值,如果可能的话(例如在循环内)。所以你的代码适合对话框监听器:uploadingDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {     public void onCancel(DialogInterface dialog) {         myTask.cancel(true);         //finish();     }});现在,正如我之前在SDK中提到的那样,您必须检查任务是否被取消,因为您必须在onPreExecute()方法中检查isCancelled()。例如:if (isCancelled())      break;else{    // do your work here}
随时随地看视频慕课网APP

相关分类

Android
我要回答