2013-04-24 72 views
0

我有一个AsyncTask执行多个AsyncTasks(调用Web服务)。使AsyncTask等待其他AsyncTasks

我正在寻找一种方法,使我的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 
      } 
     } 
    } 
推出

在此先感谢

+0

不要在asynctask中使用asynctasks,将你嵌套的asynctask转换成方法然后运行它,这样它将在你的线程内同步运行。 – ePeace 2013-04-24 10:06:37

回答

1

您可以致电doInBackground其他AsyncTasks的方法从您主要的doInBackground

public class MainAsyncTask<?, ?, ?>{ 
    doInBackground(){ 
     new OtherAsyncTask().doInBackground(); 
     new AnotherAsyncTask().doInBackground(); 
    } 
} 

或者,更好的,拆你的代码了一下,因此AsyncTasks不负责。

+0

非常感谢,您的回复只是完美 – Simo 2013-04-24 12:09:28

+0

或更好,'otherAsyncTask.onPostExecute(otherAsyncTask.doInBackground());' – jburns20 2013-07-21 06:33:57

0

您应该运行您的任务执行用一个回调函数来创建一个接口(观察者设计模式),并且在每一个接口完成之后,你可以在调用线程中做任何你想做的事情。但是我不会从doInBackground()内部启动asyncTasks,你应该从主(UI)线程中执行此操作。

0

您可以在AsyncTask1的OnPostExecute()中优化AsynTask2或AsyncTask3。但Observer设计模式是做这件事的好方法。