8

我需要组合两个列表,每个列表在其单独的异步调用之后返回。如何最好地协调这样的异步调用。是否有任何标准的 SDK 方法可以等待另一个异步任务完成?

4

3 回答 3

6

execute()call 返回一个 的实例AsyncTask,你可以保存这个实例以供以后检查,如果任务已经完成或没有调用getStatus(),所以你的代码将如下所示:

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;
        }
    }
}

最后完成的任务可以启动新任务以合并结果。

于 2012-04-24T01:38:36.353 回答
0

Java 有一些不错的东西,例如 Future 类等。在这里描述这个框架没有用,网上有很多资源。无论如何,拥有一个异步任务可能会更好,实际上不需要同时运行两个异步任务。您可以在一个 doInBackground 中完成这两个部分

于 2012-04-23T20:39:04.537 回答
0

这真的取决于需要。

您是否需要等待所有数据到达?如果不只是在您的活动中使用同步块功能调用您的功能

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

于 2012-04-24T08:16:26.947 回答