Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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 调用一堆AsyncTask,是否有办法知道它们何时全部完成以显示消息?_Java_Android_Android Asynctask - Fatal编程技术网

Java 调用一堆AsyncTask,是否有办法知道它们何时全部完成以显示消息?

Java 调用一堆AsyncTask,是否有办法知道它们何时全部完成以显示消息?,java,android,android-asynctask,Java,Android,Android Asynctask,所以我要做的是,我有一个循环,我在循环中调用了一个AsyncTask,所以可能有很多。根据我的理解,在循环完成后,我不能仅仅显示一条消息,说明一切都已完成,因为该消息将在异步任务完成之前出现,因为这有点像异步线程 如果我只有一个AsyncTask,那就是一个nobrainer,我会把代码放在onPostExecute()中显示消息,但现在我有了很多 那么,有没有办法知道所有AsyckTast线程何时全部完成,以便我可以显示我的消息 感谢您的回答,正如您可能猜到的,我对Java有点陌生。尝试使用一

所以我要做的是,我有一个循环,我在循环中调用了一个AsyncTask,所以可能有很多。根据我的理解,在循环完成后,我不能仅仅显示一条消息,说明一切都已完成,因为该消息将在异步任务完成之前出现,因为这有点像异步线程

如果我只有一个AsyncTask,那就是一个nobrainer,我会把代码放在onPostExecute()中显示消息,但现在我有了很多

那么,有没有办法知道所有AsyckTast线程何时全部完成,以便我可以显示我的消息


感谢您的回答,正如您可能猜到的,我对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;
 }

可以通过等待通知的方法来改进。

最近读了一篇博客,声称如果你有超过一定数量的异步任务,事情就会变得奇怪。詹姆斯:我也读过同样的书,但我认为我仍然处于“特定数量”的异步任务之下,或者至少我还没有遇到任何问题。但是谢谢你的建议。最近读了一篇博客,声称如果你有超过一定数量的异步任务,事情就会变得奇怪。詹姆斯:我也读过同样的书,但我认为我仍然处于“特定数量”的异步任务之下,或者至少我还没有遇到任何问题。但是谢谢你的建议。好方法!我将努力实施它。谢谢你的回复。好方法!我将努力实施它。谢谢你的回复。