【问题标题】:Cancelling all the running instances of an AsyncTask取消所有正在运行的 AsyncTask 实例
【发布时间】:2015-10-08 10:14:57
【问题描述】:

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

我想取消按下后退按钮时的进度对话框,同时来自同一段代码的异步任务的所有实例。

【问题讨论】:

  • 调用cancel 方法。参考这个:developer.android.com/reference/android/os/…
  • 如果不引用每个单独的 AsyncTask,就无法取消所有实例。阅读有关 cancel() 对 AsyncTask 的作用的文档。
  • 实际上同一个 asyncTask 有不同的实例,我想从同一个事件中取消所有实例
  • @Sree 它不是重复的,请尝试理解这是不同的情况

标签: android android-asynctask


【解决方案1】:

您无法取消所有实例没有每个单个 AsyncTask 的引用。

阅读有关 cancel() 对 AsyncTask 的作用的文档。

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

【讨论】:

    【解决方案2】:

    使用以下代码取消正在运行的异步任务

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

    【讨论】:

    • 这个答案已经存在请理解问题陈述
    【解决方案3】:

    我可以在 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- 当您的活动停止时,使标志等于 1

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

    【讨论】:

      【解决方案4】:

      在你的活动(或任何对异步任务可见的地方)和异步任务内部设置一个布尔标志:

      while (flag) {
          your_logic;
      }
      

      当按下返回时,将标志设置为 false,并且每个 asynctask 都应该自行停止 - 然后您不需要对 asynctasks 本身的引用,因为它们会完成所有工作。

      【讨论】:

        【解决方案5】:

        找到解决方案:我在上传Dialog.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

        【讨论】:

        • 这不是针对他的问题。他不是在问你如何取消一个 AsyncTask,他是在问你如何取消几个。请参考我的帖子。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-10
        • 2018-12-29
        • 1970-01-01
        • 1970-01-01
        • 2021-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多