取消AsyncTask的所有正在运行的实例

时间:2015-10-08 10:14:58

标签: android android-asynctask

是否有取消所有正在运行的Asynctask实例?提前谢谢。

我想取消按下后退按钮的进度对话框,同时取消同一段代码中asynctask的所有实例。

5 个答案:

答案 0 :(得分:2)

您无法取消所有 EACH 个别AsyncTask的引用。

阅读有关cancel()确实形成AsyncTask的文档。

一旦你有了对每个AsyncTask的引用,你就可以取消每个AsyncTask。

答案 1 :(得分:1)

使用以下代码取消运行asynctask

if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING))
  {
 myAsyncTask.cancel(true);
 }

答案 2 :(得分:1)

我可以解决它在OnStop()

中制作一个标志

1-宣布全球

    int flagOnStop=0;

2-声明所有全局AsyncTask - >

    Async_Task asyncTask1,asyncTask2,asyncTaskn;

3-在执行之前,请求flagOnStop - >

if(flagOnStop==0{
    asyncTask1=new Async_Task();
    asyncTask1.execute();

    asyncTask2=new Async_Task();
    asyncTask2.execute();

    asyncTaskn=new Async_Task();
    asyncTaskn.execute();

}

4-当你的活动停止时,使旗帜等于一个

@Override
public void onStop() {
    super.onStop();
    flagOnStop=1;
    asyncTask.cancel();
    asyncTask2.cancel();
    asyncTaskn.cancel();
}

答案 3 :(得分:0)

在您的活动中(或asynctasks可见的任何地方)和asynctask do中设置一个布尔标志:

while (flag) {
    your_logic;
}

当按下后将标志设置为false并且每个asynctask都应该自行停止 - 那么你不需要引用asyntasks本身,因为它们将完成所有的工作。

答案 4 :(得分:0)

找到解决方案:我在上传Digial.show()之前添加了一个动作监听器:

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

当我按下后退按钮时,上面的OnCancelListener取消了对话框和任务。如果要在后退时完成整个活动,也可以添加finish()。请记住将异步任务声明为如下变量:

MyAsyncTask myTask=null;

执行你的异步任务:

myTask = new MyAsyncTask();
myTask.execute();

参考:Android: Cancel Async Task