当我开发Android应用程序时,如何取消正在运行的AsyncTask?

时间:2012-12-24 01:42:58

标签: android asynchronous android-asynctask

  

可能重复:
  Ideal way to cancel an executing AsyncTask

当我开发Android应用程序时,我使用AsyncTask下载了一些内容,我使用progressDialog来显示此AsyncTask的进度,现在当我按下后退按钮时,我想要取消这个AsycTask ,我调用了AsycTask.cancel(),但它不起作用。如何取消正在运行的AsyncTask?

3 个答案:

答案 0 :(得分:1)

 class ImplementAsynctask extends AsyncTask implements OnDismissListener{
       ProgressDialog dialog = new ProgressDialog(ActivityName.this);

       protected onPreExecute() {
           //do something and show progress dialog
       }
       protected onPostExecute() {
          //cancel dialog after completion
       }

       @Override
        public void onDismiss(DialogInterface dialog) {
            //cancel AsycTask in between.
            this.cancel(true);
        }
};

答案 1 :(得分:0)

最正确的方法是在doInBackground内定期检查任务是否被取消(即通过调用isCancelled)。来自http://developer.android.com/reference/android/os/AsyncTask.html

取消任务:

可以随时通过调用取消任务  cancel(boolean)。调用此方法将导致后续调用  isCancelled()返回true。调用此方法后,  将调用onCancelled(Object),而不是onPostExecute(Object)  在doInBackground(Object[])返回后。确保完成任务  尽快取消,你应该经常检查退货  ifCancelled()的值定期来自doInBackground(Object[]),如果  可能的(例如在循环内)。

如果您需要更多信息,请查看此博客文章:http://vikaskanani.wordpress.com/2011/08/03/android-proper-way-to-cancel-asynctask/

答案 2 :(得分:0)

点击后退按钮执行以下操作:

将Asynctask声明为全局变量,如下所示:

//AysncTask class
private contactListAsync async;

    if(async != null){

    async.cancel(true);

    async= null;

    }
相关问题