2012-04-23 34 views
6

我需要结合两个列表,每个列表都是在各自独立的异步调用之后返回的。如何最好地协调像这样的异步调用。是否有任何标准的SDK方法等待另一个异步任务完成?Android如何同步两个异步任务?

+0

如何将两个asynctasks的工作结合在一起? – dmon 2012-04-23 21:07:18

+0

或使用AsyncTask.executeOnExecutor(singleThreadPoolExecutor)处理排队执行。 – yorkw 2012-04-23 21:25:07

回答

0

Java有一些不错的东西,比如Future类和类似东西。这里没有用来描述这个框架的网上有很多资源。无论如何,只要有一个异步任务可能会更好,但实际上并不需要同时运行两个异步任务。你无法通过调用getStatus()做这两部分在一个单一的doInBackground

5

​​调用返回的AsyncTask一个实例,你可以保存这个实例后来检查,如果任务完成,或者,让你的代码看起来就像这样:

final AsyncTask<...> first_task; 
final AsyncTask<...> second_task; 

public someMethod() { 
    first_task = new MyFirstAsyncTask().execute(); 
    second_task = new MySecondAsyncTask().execute(); 
    // other things 
} 

private class MyFirstTask extends AsyncTask<...> { 
    // business as usual 

    protected void onPostExecute(SomeData[] result) { 
     if(second_task != null && second_task.get_status() == AsyncTask.Status.FINISHED) { 
      // start the task to combine results 
      .... 
      // 
      first_task = second_task = null; 
     } 
    } 
} 

private class MySecondTask extends AsyncTask<...> { 
    // business as usual 

    protected void onPostExecute(SomeData[] result) { 
     if(first_task != null && first_task.get_status() == AsyncTask.Status.FINISHED) { 
      // start the task to combine results 
      .... 
      // 
      first_task = second_task = null; 
     } 
    } 
} 

并且最后完成的任务可以开始新任务以组合结果。

0

这真的取决于需求。

您是否需要等待所有数据才能到达?如果不是只是打电话哟您的功能与您的活动中的同步功能块

如果是,你期望他们只能工作一次;因此总共两个(或X)?也许你可以检查:CoundDownLacth(http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html)