Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.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
Android 如何等待多个异步任务完成其工作?_Android_Json_Rss_Android Volley_Xmlreader - Fatal编程技术网

Android 如何等待多个异步任务完成其工作?

Android 如何等待多个异步任务完成其工作?,android,json,rss,android-volley,xmlreader,Android,Json,Rss,Android Volley,Xmlreader,我正在使用threadpoolexecutor使3个异步任务同时工作。每个线程在一个Arraylist中从RSS提要收集数据,然后我想将这3个Arraylist合并到一个主线程中的更新视图中。问题是,我需要在所有3个线程完成工作后执行此操作,如何在这些线程上侦听?您可以调用异步任务get函数,等待它完成,或者您可以在每个任务的onPostExecute函数中增加计数器。一旦计数器值为异步任务数,执行代码 使用倒计时闩锁。这个java类为您提供了方便的同步计数器。初始化计数为3的对象,调用awai

我正在使用
threadpoolexecutor
使3个异步任务同时工作。每个线程在一个
Arraylist
中从RSS提要收集数据,然后我想将这3个Arraylist合并到一个主线程中的更新视图中。问题是,我需要在所有3个线程完成工作后执行此操作,如何在这些线程上侦听?

您可以调用异步任务get函数,等待它完成,或者您可以在每个任务的onPostExecute函数中增加计数器。一旦计数器值为异步任务数,执行代码

使用
倒计时闩锁
。这个java类为您提供了方便的同步计数器。初始化计数为3的对象,调用
await()
,然后在每个任务完成时对其调用
countDown()
。一旦为0,锁将被释放,您可以执行您的任务。

创建一个成员变量并初始化为0,在每次onPostExecute时递增它。还要检查所有onPostExecute中的值是否为3,以及是否为3调用方法来组合arraylist。

调用get函数将阻塞用户界面,直到它完成为止。不要这样做。如果我在主线程中调用
await()
,它将被阻塞。所以我应该把
await()
放在第四个线程中?是的。创建一个线程,该线程将调用
await()
。释放锁后,您可以执行操作。如果需要执行UI操作,可以使用UI处理程序:
public void run(){countDownLatch.await();uiHandler.post(yourRunnable);}
在并发修改的情况下,最好使用
AtomicInteger