2013-04-24 67 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設計模式是做這件事的好方法。