Java 调用一堆AsyncTask,是否有办法知道它们何时全部完成以显示消息?
所以我要做的是,我有一个循环,我在循环中调用了一个AsyncTask,所以可能有很多。根据我的理解,在循环完成后,我不能仅仅显示一条消息,说明一切都已完成,因为该消息将在异步任务完成之前出现,因为这有点像异步线程 如果我只有一个AsyncTask,那就是一个nobrainer,我会把代码放在onPostExecute()中显示消息,但现在我有了很多 那么,有没有办法知道所有AsyckTast线程何时全部完成,以便我可以显示我的消息Java 调用一堆AsyncTask,是否有办法知道它们何时全部完成以显示消息?,java,android,android-asynctask,Java,Android,Android Asynctask,所以我要做的是,我有一个循环,我在循环中调用了一个AsyncTask,所以可能有很多。根据我的理解,在循环完成后,我不能仅仅显示一条消息,说明一切都已完成,因为该消息将在异步任务完成之前出现,因为这有点像异步线程 如果我只有一个AsyncTask,那就是一个nobrainer,我会把代码放在onPostExecute()中显示消息,但现在我有了很多 那么,有没有办法知道所有AsyckTast线程何时全部完成,以便我可以显示我的消息 感谢您的回答,正如您可能猜到的,我对Java有点陌生。尝试使用一
感谢您的回答,正如您可能猜到的,我对Java有点陌生。尝试使用一个
静态整数,该整数在创建的每个异步任务中递增,并在onPostExecute()
中递减。当它达到0时,您的所有任务都将完成
例如:
创建任务时:
synchronized(staticInt) {
//create AsyncTask
++staticInt;
}
当它结束时:
protected void onPostExecute(Object result) {
synchronized(staticInt) {
--staticInt;
if (staticInt == 0) {
//show message
}
}
}
正如@James所建议的,您还可以使用它来控制在特定时间执行的异步任务的最大数量:
while (staticInt >= MAX_NUMBER_OF_THREADS) {
//wait
}
synchronized(staticInt) {
//create AsyncTask
++staticInt;
}
它可以通过等待通知方法进行改进。尝试使用静态整数
,该整数为创建的每个异步任务
递增,并在onPostExecute()
中递减。当它达到0时,您的所有任务都将完成
例如:
创建任务时:
synchronized(staticInt) {
//create AsyncTask
++staticInt;
}
当它结束时:
protected void onPostExecute(Object result) {
synchronized(staticInt) {
--staticInt;
if (staticInt == 0) {
//show message
}
}
}
正如@James所建议的,您还可以使用它来控制在特定时间执行的异步任务的最大数量:
while (staticInt >= MAX_NUMBER_OF_THREADS) {
//wait
}
synchronized(staticInt) {
//create AsyncTask
++staticInt;
}
可以通过等待通知的方法来改进。最近读了一篇博客,声称如果你有超过一定数量的异步任务,事情就会变得奇怪。詹姆斯:我也读过同样的书,但我认为我仍然处于“特定数量”的异步任务之下,或者至少我还没有遇到任何问题。但是谢谢你的建议。最近读了一篇博客,声称如果你有超过一定数量的异步任务,事情就会变得奇怪。詹姆斯:我也读过同样的书,但我认为我仍然处于“特定数量”的异步任务之下,或者至少我还没有遇到任何问题。但是谢谢你的建议。好方法!我将努力实施它。谢谢你的回复。好方法!我将努力实施它。谢谢你的回复。