繁体   English   中英

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

[英]Android How to Sync Two Async tasks?

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

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

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

Java有一些不错的东西,例如Future类之类。 这里没有描述这个框架的用处,网上有很多资源。 最好有一个异步任务,但实际上不必同时运行两个异步任务。 您可以在一个doInBackground中完成这两个部分

这确实取决于需要。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM