Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android如何同步两个异步任务?_Java_Android - Fatal编程技术网

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

Java Android如何同步两个异步任务?,java,android,Java,Android,我需要合并两个列表,每个列表在单独的异步调用后返回。如何最好地协调像这样的异步调用。有没有标准的SDK方法可以等待另一个异步任务完成?Java有一些不错的东西,比如Future类等等。这里没有必要描述这个框架。网上有很多资源。不过,使用一个异步任务可能更好,因为实际上不需要同时运行两个异步任务。您可以在一个doInBackground中执行这两个部分,调用返回一个异步任务的实例,您可以通过调用getStatus(),保存该实例以供以后检查任务是否已完成,因此您的代码如下所示: final Asy

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

Java有一些不错的东西,比如Future类等等。这里没有必要描述这个框架。网上有很多资源。不过,使用一个异步任务可能更好,因为实际上不需要同时运行两个异步任务。您可以在一个doInBackground中执行这两个部分,调用返回一个异步任务的实例,您可以通过调用
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;
        }
    }
}
最终异步任务第一个任务;
最终任务第二个任务;
公共方法(){
first_task=新建MyFirstAsyncTask().execute();
第二个任务=新建MySecondAsyncTask().execute();
//其他事情
}
私有类MyFirstTask扩展了AsyncTask{
//一切照旧
受保护的void onPostExecute(SomeData[]结果){
if(second_task!=null&&second_task.get_status()==AsyncTask.status.FINISHED){
//启动任务以合并结果
....
//
第一个任务=第二个任务=空;
}
}
}
私有类MySecondTask扩展了AsyncTask{
//一切照旧
受保护的void onPostExecute(SomeData[]结果){
if(first_task!=null&&first_task.get_status()==AsyncTask.status.FINISHED){
//启动任务以合并结果
....
//
第一个任务=第二个任务=空;
}
}
}

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

这取决于需要

您需要等待所有数据到达吗?如果不只是在活动中使用synchronized block函数调用您的函数


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

如何将两个异步任务的工作合并到一个任务中?或者使用AsyncTask.executeOnExecutor(singleThreadPoolExecutor)处理队列执行。