使AsyncTask等待其他AsyncTasks

时间:2013-04-24 10:03:18

标签: android android-asynctask

我有一个AsyncTask执行多个AsyncTasks(调用Web服务)。

我正在寻找一种方法让我的AsyncTask等待其他AsyncTask响应

能够提供“主要”AsyncTask响应

public class MainTask extends AsyncTask<String, Void, String> {
    protected String doInBackground(String... urls) {
          for (int i=0 ; i<myObjects.size();i++) {
                MyObject m=myObjects.get(i);
                creationTask=new CreationTask();
                //init creationTask
                creationTask.execute(new String[] { URL });
          }
            //wait for creationTasks responses
            //return "success" if all succeeded
     }
}

MainTask启动的任务

   public class CreationTask extends AsyncTask<String, Void, String> {
        protected String doInBackground(String... urls) {
               //Creation request to web Service
              return result;
        }
        @Override
        protected void onPostExecute(String result) {
            if ("success".equals(result)) {
                //notify MainTask
            }
        }
     }

提前致谢

3 个答案:

答案 0 :(得分:1)

您可以从主要doInBackground中调用其他AsyncTasks的{​​{1}}方法。

doInBackground

或者,更好的是,将代码分开一点,以便public class MainAsyncTask<?, ?, ?>{ doInBackground(){ new OtherAsyncTask().doInBackground(); new AnotherAsyncTask().doInBackground(); } } 不负责。

答案 1 :(得分:0)

您应该使用回调来运行实现接口(观察者设计模式)的任务,并且在完成每个任务之后,您将能够在调用线程中执行任何操作。但我不会从doInBackground()内部启动asyncTasks,你应该从主(UI)线程中执行此操作。

答案 2 :(得分:0)

您可以在AsyncTask1的OnPostExecute()中使用AsynTask2或AsyncTask3。但Observer设计模式是这样做的好方法。