關於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