簡體   English   中英

android looper和executor線程池的區別

[英]difference between android looper and executor thread pool

我正在閱讀有關 loopers以及Executor Thread Pools 的內容,它們似乎在做完全相同的事情……還是我錯過了什么?

Looper管理線程將運行的任務。 它將它們放在一個隊列中,然后線程將執行下一個任務。 Looper 綁定到一個特定的線程。

一個Executor封裝了對不同線程的管理和分發任務。 如果您的線程池大小固定為 1,那么我想它在設計上與 Looper 類似,因為它只會為那個線程排隊工作。 如果您有一個大小 > 1 的線程池,那么它將管理將任務交給下一個可用的線程來完成工作,或者換句話說,它將在所有線程之間分配任務。

編輯:推薦閱讀: http : //developer.android.com/reference/java/util/concurrent/package-summary.html

執行器更靈活。 對於 Android,我真正使用 Looper 的唯一時間是嘗試讓 Handler 從后台線程(甚至可以在 ExecutorService 中)與主線程進行通信。 例如:

Handler mainThreadHandler = new Handler(Looper.getMainLooper());
mainThreadHandler.post(new Runnable...); //runs on main thread

讓我補充一點,本機代碼可以使用 android looper。 Android Looper系統由Looper類、Handler類、MesseageQueue類組成。 一個循環器綁定到一個線程。 從 Andorid 4.0 開始,MessageQueue 由 java 代碼和 c 代碼實現,兩者相連。 您可以通過本機代碼或 Java 代碼向同一個 MessageQueue 發送消息。

所以區別在於:

  1. Looper 用一個線程很簡單,但是 ExecutorThreadPool 用一個或多個線程復雜和靈活。

  2. 本地代碼可以方便地使用 Looper。

此外,Looper 和 Handler 常用於 Android 代碼中。 一些 android 開發者比 ExecutorThreadPool 更熟悉 Handler。

需要注意的是,AndroidX 定義了HandlerExecutor GMS 提供相同的課程。 這是一個執行程序,它使用可以構建在任何 Looper 上的 Handler。 例如,通過這種方式,我們可以在 API 級別 < 28 上為 Main 線程獲取一個 Executor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM