基本上你正在努力实现以下目标。
第 1 步 - UI 中的用户启动 1,2,... n 个下载任务。第 2 步 - 每项任务完成后,应启动新线程来处理它。第 3 步 - 完成所有 n 个任务后,应更新 UI ...可能会显示成功对话框。
这可以通过使用异步任务轻松实现。我将告诉你方法而不是代码示例。
Things to note about Async Task
在 1.6 之前,Async Task 使用单个附加线程处理所有后台操作。在 1.6 到 3.0 之后……它发生了变化,因此开始使用线程池。并且可以同时处理操作。
由于 Honeycomb 默认行为切换回使用单个工作线程(一个接一个处理)。
How to implement your requirement
根据您的要求,如果您愿意,可以使用方法 (executeOnExecutor) 来运行同时任务(1 到 n 个任务)(有两个不同的标准执行器:SERIAL_EXECUTOR 和 THREAD_POOL_EXECUTOR)。
任务入队的方式还取决于您使用的执行器。在并行的情况下,您的限制为 10(新的 LinkedBlockingQueue(10))。如果是连续的,则不受限制(新的 ArrayDeque())。
因此,处理任务的方式取决于您运行它们的方式以及运行它们的 SDK 版本。至于线程限制,我们无法保证,但查看 ICS 源代码,我们可以说池中的线程数可以在 5..128 范围内变化。
当您使用默认执行方法启动太多任务(如 100 或更多)时,将使用串行执行器。由于无法立即处理OutOfMemoryError
的任务被排入队列(数千个任务被添加到数组支持的队列中)。
您可以一次启动的确切任务数量取决于您正在运行的设备的内存类别,以及您使用的执行程序。
因此,按照这种方法,一旦完成所有任务,您就可以使用处理程序来更新 UI。
希望这可以帮助。