1

所以我正在做的是,我有一个循环,我在循环中调用了一个 AsyncTask,所以可能会有一堆。据我了解,在循环完成后,我不能只显示一切都已完成的消息,因为该消息将在 AsyncTasks 完成之前出现,因为这有点像异步线程。

如果我只有一个 AsyncTask 那就太简单了,我会将用于显示消息的代码放入 onPostExecute() 但现在我有很多。

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

感谢您的回答,您可能已经猜到了,我对 Java 有点陌生。

4

1 回答 1

1

尝试static Integer为每个AsyncTask创建的增量和onPostExecute()递减它。当它达到 0 时,您的所有任务都将完成。

例如:创建任务时:

 synchronized(staticInt) {
    //create AsyncTask
    ++staticInt;
 }

当它完成时:

 protected void onPostExecute(Object result) {
     synchronized(staticInt) {
        --staticInt;
        if (staticInt == 0) {
           //show message
        }
     }
 }

正如@James 建议的那样,您还可以使用它来控制 AsyncTask 在特定时间执行的最大数量:

 while (staticInt >= MAX_NUMBER_OF_THREADS) {
     //wait
 }

 synchronized(staticInt) {
    //create AsyncTask
    ++staticInt;
 }

它可以通过等待通知方法进行改进。

于 2012-06-07T08:59:05.100 回答