关于Honeycomb +上的AsyncTasks
执行顺序的问题。每Google's documentation:AsyncTasks是否也在SERIAL_EXECUTOR中的同一后台线程上执行?
当第一次推出,AsyncTasks进行系列在单个 后台线程执行。从DONUT开始,将其更改为允许多个任务并行操作的 线程池。从 HONEYCOMB开始,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误 。
我的问题是,在后台连续执行的AsyncTasks是否也会在同一个线程上运行?
例如,执行任务A,B和C的AsyncTask.SERIAL_EXECUTOR
会在线程1上运行任务A,然后在线程1上运行任务B,然后在线程1上运行任务C?
或者,AsyncTask.SERIAL_EXECUTOR
可能会在线程1上执行任务A,然后执行线程2上的任务B,然后在线程3上执行任务C?在这个方案中,所有的任务都是连续执行的,但是它们在不同的后台线程上运行。
我问,因为我加了一些调试代码到我的doInBackground,我看到一个名为AsyncTask #5
AsyncTask #4
AsyncTask #2
和AsyncTask #3
线程,当我以为我刚才看到一个单独的线程每个命名“的AsyncTask工作者”什么时间。
(我只是想确认AsyncTasks如何预期工作我自己的心智模式。我不报告在这个问题上的错误或问题)
谢谢!
“在后台串行执行的AsyncTasks是否也会在同一个线程上运行?” - [实施](https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/os/AsyncTask.java)很奇怪。AsyncTask不是使用单线程线程池,而是维护自己的队列,并将任务一次一个地提供给常规的多线程线程池(可见为“THREAD_POOL_EXECUTOR”)。因此,你观察到的行为非常合理。 – CommonsWare
谢谢!如果您想将此作为回答让我接受,我很乐意这样做! – esilver