安卓如何同步两个异步任务?

8

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


将两个异步任务的工作合并到一个任务中怎么样? - dmon
或者使用 AsyncTask.executeOnExecutor(singleThreadPoolExecutor) 处理排队执行。 - yorkw
3个回答

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

这真的取决于需求。

如果不需要等待所有数据到达,那么只需在您的活动中使用同步块函数调用您的函数即可。

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


0

Java有一些不错的东西,比如Future类等。这个框架在网上有很多资源,所以没有必要在这里进行描述。然而,最好还是只有一个异步任务,因为真的没有必要同时运行两个异步任务。你可以在单个doInBackground中完成两个部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接