所以我正在做的是,我有一个循环,我在循环中调用AsyncTask,所以可能有一堆。根据我的理解,在循环完成之后,我不能只显示一切都完整的消息,因为消息将在AsyncTasks完成之前出现,因为这有点异步线程。
如果我只有一个AsyncTask它将是一个nobrainer,我会把我的代码显示在onPostExecute()中,但现在我有很多。
那么有没有办法知道所有的AsyckTast线程都已完成,所以我可以显示我的消息?
感谢您回答,正如您可能已经猜到的那样,我对Java有点新鲜。
答案 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方法进行改进。