调用一堆AsyncTask,有没有办法知道它们何时完成以显示消息?

时间:2012-06-07 08:52:37

标签: java android android-asynctask

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

如果我只有一个AsyncTask它将是一个nobrainer,我会把我的代码显示在onPostExecute()中,但现在我有很多。

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

感谢您回答,正如您可能已经猜到的那样,我对Java有点新鲜。

1 个答案:

答案 0 :(得分: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;
 }

可以使用wait-notify方法进行改进。