AsyncTasks是否有同时执行的限制?

Tot*_*mus 7 android limit android-asynctask android-2.3-gingerbread

这应该有一个简单的答案,但我找不到任何答案.因为我还是个假人,所以我来这里问你们.

我一直在创建这个在启动时执行10个AsyncTasks的项目.每个任务包含3个URL,这些URL在那里收集数据,并且在应用程序中尚未执行任何重要操作.

我还有10个textviews,用于跟踪AsyncTasks的进度.

当任务开始时,相应的文本视图被置于"开始"当任务正在进行时,它将其适当的文本视图设置为"正在下载"当任务完成时,它将其适当的文本视图设置为"已完成"

这就是我观察到的并且对AsyncTask提出质疑.当我启动应用程序时,我注意到有5个文本视图被切换到"正在下载"标记,所以我看到5个AsyncTasks正在按照自己的意愿完成工作.完成后,它启动一个新的AsyncTask.然而,他们从未超过5的限制.

是什么导致5个AsynchTasks同时运行的限制?我是否在一些我找不到的文件中导致这种情况?这是android 2.3.3的限制吗?也许是我用来模拟应用程序的设备的限制?

任何人都可以为我详细说明吗?

kab*_*uko 8

是的,有一个限制.AsyncTask通过支持ThreadPoolExecutor为5的核心池大小,但128的最大池大小(从1.6 - 4.0.3),所以我真的想你应该会看到你的所有10个运行一次.你不能改变它.如果你真的想做一些不同的事情(除非你有一个非常具体的原因我不推荐它),你将不得不做一些自定义的更大的池大小或者只是手动旋转一堆线程.

更新:

以下是文档所说的内容:

如果有多个corePoolSize但运行的maximumPoolSize线程少于maximumPoolSize,则只有在队列已满时才会创建新线程.

所以这就是为什么.您的队列未满,因此它只是将其保持在核心池大小.

  • 如果要自定义`AsyncTask的处理方式,可以向`executeOnExecutor()`提供任意的`Executor`实例. (2认同)