这应该有一个简单的答案,但我找不到任何答案。
既然我还是个机器人假人,我就来问你们。
我一直在做这个项目,在启动时执行10个异步任务。
每个任务包含3个url,在那里收集数据,在应用程序中不做任何重要的事情。
我还有10个文本视图,用于跟踪异步任务的进度。
当任务启动时,相应的textview将置于“开始”位置
当任务进行时,它会将相应的textview设置为“downloading”
当任务完成时,它会将相应的textview设置为“finished”
这就是我观察到的,并且开始质疑异步任务。
当我启动这个应用程序时,我注意到有5个文本视图被切换到“下载”标记,所以我看到5个异步任务按原样工作。完成后,它将启动一个新的异步任务。然而,他们从来没有达到过5的上限。
是什么原因导致5个asynchtask同时运行?
是不是因为我找不到文件?
这是android 2.3.3的限制吗?可能是我用来模拟应用程序的设备的限制?
有人能为我详细说明一下吗?

最佳答案

是的,有个限度。AsyncTaskThreadPoolExecutor支持,核心池大小为5,但最大池大小为128(从1.6到4.0.3),因此我认为您应该立即看到所有10个池的运行。但你不能改变它。如果你真的想做一些不同的事情(除非你有一个非常具体的原因,否则我不推荐这样做),你将不得不做一些更大池大小的自定义的事情,或者只是手动旋转一堆线程。
更新:
医生说:
如果运行的线程超过corepoolsize但小于maximumpoolsize,则仅当队列已满时才会创建新线程。
所以这就是原因。您的队列未满,因此它只将其保持在核心池大小。

10-07 19:35