所以我正在做的是,我有一个循环,我在循环中调用了一个 AsyncTask,所以可能会有一堆。据我了解,在循环完成后,我不能只显示一切都已完成的消息,因为该消息将在 AsyncTasks 完成之前出现,因为这有点像异步线程。
如果我只有一个 AsyncTask 那就太简单了,我会将用于显示消息的代码放入 onPostExecute() 但现在我有很多。
那么有没有办法知道所有 AsyckTast 线程何时都完成,以便我可以显示我的消息?
感谢您的回答,您可能已经猜到了,我对 Java 有点陌生。
所以我正在做的是,我有一个循环,我在循环中调用了一个 AsyncTask,所以可能会有一堆。据我了解,在循环完成后,我不能只显示一切都已完成的消息,因为该消息将在 AsyncTasks 完成之前出现,因为这有点像异步线程。
如果我只有一个 AsyncTask 那就太简单了,我会将用于显示消息的代码放入 onPostExecute() 但现在我有很多。
那么有没有办法知道所有 AsyckTast 线程何时都完成,以便我可以显示我的消息?
感谢您的回答,您可能已经猜到了,我对 Java 有点陌生。
尝试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;
}
它可以通过等待通知方法进行改进。