4

可能重复:
取消正在执行的 AsyncTask 的理想方法

当我开发一个Android应用程序时,我用anAsyncTask来下载东西,我用aprogressDialog来显示这个AsyncTask的进度,现在当我按下后退按钮时,我想取消这个AsycTask,我调用了AsycTask.cancel(),但是它不起作用. 如何取消正在运行的 AsyncTask ?

4

3 回答 3

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);
        }
};
于 2012-12-24T03:24:02.893 回答
0

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

将您的 Aynctask 声明为全局变量,如下所示:

//AysncTask class
private contactListAsync async;

    if(async != null){

    async.cancel(true);

    async= null;

    }
于 2012-12-24T04:37:31.287 回答
0

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

取消任务:

可以通过调用随时取消任务 cancel(boolean)。调用此方法将导致后续调用 isCancelled()返回true。调用此方法后 ,将在返回后调用onCancelled(Object), 而不是。为了确保尽快取消任务,如果可能(例如在循环内),您应该始终从 定期检查 isCancelled() 的返回值。onPostExecute(Object)doInBackground(Object[])doInBackground(Object[])

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

于 2012-12-24T02:04:28.237 回答