講講Handler實現原理
各主要類作用:
Handler:負責傳送訊息及處理訊息
Looper:複製不斷的從訊息佇列中取出訊息,並且給傳送本條訊息的Handler
MessageQueue:負責儲存訊息
Message:訊息本身,負責攜帶資料
分發流程:
初始化訊息佇列,建立messageQueue並繫結到Looper上。
Handler的sendMessage發起訊息處理流程開端,建立Message並放入到MessageQueue中,由Looper的無限迴圈任務喚醒阻塞,開始分發Message,執行Message的Runable之後,呼叫儲存的handler的handleMessage方法,回到handler實現結束訊息流程。
主要類的關聯關係:
ThreadLocal中獲取Looper物件,說明Looper是執行緒獨立的,即主執行緒(MainThread)持有。
MessageQueue是在Looper的構造方法建立,說明Looper是關聯的MessageQueue的。採用next持有message物件引用,形成連結串列實現。
Looper的loop方法,發起for(;;)無限迴圈,在message.next()中或者沒有物件阻塞,或者有物件進行message執行。
Message中callback儲存runable物件用來執行,next儲存下一個message用來實現連結串列,target用來執行runable的run方法。
延申問題:
那麼,loop的for(;;)會阻塞執行緒,那麼主執行緒是如何在阻塞時接觸阻塞的呢?按上面的說法是沒有其他執行緒進行喚醒操作的
相關文章
- 送命題:講一講Mybatis外掛的原理及如何實現?MyBatis
- SAP CRM calculated欄位的實現原理講解
- 用最基礎的方法講解 Redux 實現原理Redux
- 爬蟲的實現原理和技術進行講解爬蟲
- Rainbond 對接 Istio 原理講解和程式碼實現分析AI
- 都在講Redis主從複製原理,我來講實踐總結Redis
- 記錄---nextTick用過嗎?講一講實現思路吧
- EarthChat SignalR原理講解SignalR
- Portworx on OpenShift 原理講解
- 第一講:自定義服務整合原理講解
- Android-Handler訊息機制實現原理Android
- 一文講透自適應熔斷的原理和實現
- Promise原理講解 && 實現一個Promise物件 (遵循Promise/A+規範)Promise物件
- 【AQS面試篇】瞭解ReentrantLock嗎?講講其底層實現AQS面試ReentrantLock
- Java講解RPC的基本實現JavaRPC
- 1.爬蟲 urlib庫講解 Handler高階用法爬蟲
- 閱讀原始碼後,來講講React Hooks是怎麼實現的原始碼ReactHook
- JVM原理講解和調優JVM
- 一文講透一致性雜湊的原理和實現
- 從基礎講全排列(Java實現)Java
- 【Nginx】面試官:給我講講Nginx如何實現四層負載均衡?Nginx面試負載
- 講講AWR
- 滑動視窗濾波器原理分析及詳細程式碼講解實現
- Android Handler原理Android
- Handler原理分析
- 詳細講解函式呼叫原理函式
- 講給小白聽的Promise原理剖析Promise
- 「Vue原始碼學習」簡單講一講keep-alive的原理吧Vue原始碼Keep-Alive
- 冰河,能不能講講如何實現MySQL資料儲存的無限擴容?MySql
- 面試官:請講一下Redis主從複製的功能及實現原理面試Redis
- 講講solid原則Solid
- 一個故事講完CPU的工作原理
- mysql的主從複製 原理講解MySql
- 第02講:Flink 入門程式 WordCount 和 SQL 實現SQL
- UniRx精講(一):UniRx簡介&定時功能實現
- 面對面講述JavaScript之繼承的實現JavaScript繼承
- CSS實現文字打字動畫(+1白話講解)CSS動畫
- 全方位講解 Nebula Graph 索引原理和使用索引