检查是否所有AsyncTasks都已完成

eme*_*ieu 21 multithreading android android-2.2-froyo android-asynctask

我有3 AsyncTasks和1 ProgressBar.我希望当任何任务执行时,进度条可见,当所有任务完成时,进度条是不可见的.

在Java中,有ExecutorService::isTerminated检查是否所有runnables都已完成但Android没有.

更新:3个任务同时执行.

数字. 在此输入图像描述

Moj*_*sin 23

漂亮的图形.但我担心没有建立机制.你必须自己实现它.您可以使用的解决方案很少 -

  1. 保留对所有3个任务的引用.当任务完成时,检查其他两个任务是否也完成,如果是,则关闭进度对话框,如果没有等待其他任务完成并再次检查.确保在完成后释放引用.
  2. 如果您不想保留参考商店的计数器.任务完成后,递增计数器并检查它是否等于3.如果所有任务都完成并且您已完成.如果实现此操作,请确保同步对计数器的访问.


Jag*_*esh 7

尝试使用AsyncTask.getStatus().这完全没问题.请参阅以下示例代码.

 List<AsyncTask<String, String, String>> asyncTasks = new ArrayList<AsyncTask<String, String, String>>();
 AsyncTask<String, String, String> asyncTask1 = new uploadTask().execute(string);
 AsyncTask<String, String, String> asyncTask2 = new downloadTask().execute(string);
 AsyncTask<String, String, String> asyncTask3 = new createTask().execute(string);
 asyncTasks.add(asyncTask1);
 asyncTasks.add(asyncTask2);
 asyncTasks.add(asyncTask3);
Run Code Online (Sandbox Code Playgroud)

您可以稍后循环AsyncTaskList并查找每个任务的状态,如下所示.

 for(int i=0;i<asyncTasks.size();i++){
      AsyncTask<String, String, String> asyncTaskItem = (AsyncTask<String, String, String>)asyncTasks.get(i);
      // getStatus() would return PENDING,RUNNING,FINISHED statuses
      String status = asyncTaskItem.getStatus().toString();
      //if status is FINISHED for all the 3 async tasks, hide the progressbar
 }
Run Code Online (Sandbox Code Playgroud)