Android如何同步两个异步任务?

时间:2012-04-23 20:17:45

标签: java android

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

3 个答案:

答案 0 :(得分:6)

execute()调用返回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;
        }
    }
}

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

答案 1 :(得分:0)

Java有一些很好的东西,比如Future class等。这里没有用来描述这个框架,网上有很多资源。尽管有一个异步任务可能会更好,但实际上并不需要同时运行两个异步任务。您可以在一个doInBackground中执行这两个部分

答案 2 :(得分:0)

这实际上取决于需要。

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

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