![](/img/trans.png)
[英]Which AsyncTask should I use behind SERIAL_EXECUTOR in Android
[英]Are AsyncTasks also executed on the same background thread in the SERIAL_EXECUTOR?
有關在Honeycomb +上執行AsyncTasks
的順序的問題。 根據Google的文檔 :
首次引入時,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 Worker”的線程時, “ 或者其他的東西。
(我只想確認自己關於AsyncTasks如何工作的思維模型;我沒有在此問題中報告錯誤或問題。)
謝謝!
在后台串行執行的AsyncTasks是否也會在同一線程上運行?
實現是相當奇怪的。 AsyncTask不會使用單線程線程池,而是維護自己的隊列,並將任務一次饋送到常規的多線程線程池(該線程池顯示為THREAD_POOL_EXECUTOR)。
AsyncTask.SERIAL_EXECUTOR是否有可能在線程1上執行任務A,然后在線程2上執行任務B,然后在線程3上執行任務C? 在這種方案中,所有任務都是串行執行的,但是它們正在不同的后台線程上運行。
如果當前未使用該池,則假設ThreadPoolExecutor
並不總是ThreadPoolExecutor
相同的線程,那是很有可能的。 與我通常相比,這更深入了Android的Java框架類的實現。 還要注意,隨着Android轉向OpenJDK並遠離基於Apache Harmony的框架類, ThreadPoolExecutor
本身的實現將在未來發生變化。 因此,我將盡量不對ThreadPoolExecutor
的實現方式進行任何假設。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.