1. 程式人生 > >面試題:闡述Handler的實現原理

面試題:闡述Handler的實現原理

處理過程
從handler中獲取一個訊息物件,把資料封裝到訊息物件中,通過handler的send…方法把訊息push到MessageQueue佇列中。
Looper物件會輪詢MessageQueue佇列,把訊息物件取出。
通過dispatchMessage分發給Handler,再回呼叫Handler實現的handleMessage方法處理訊息。

流程圖:
Handler的實現原理

Handler的實現中適及以下物件:
1、Handler本身:負責訊息的傳送和處理
2、Message:訊息物件
3、MessageQueue:訊息佇列(用於存放訊息物件的資料結構)
4、Looper:訊息佇列的處理者(用於輪詢訊息佇列的訊息物件,取出後回撥handler的dispatchMessage進行訊息的分發,dispatchMessage方法會回撥handleMessage

方法把訊息傳入,由Handler的實現類來處理)

Message物件的內部實現是連結串列,最大長度是50,用於快取訊息物件,達到重複利用訊息物件的目的,以減少訊息物件的建立,所以通常我們要使用obtainMessage方法來獲取訊息物件

安全:Handler的訊息處理機制是執行緒安全

關係:建立Handler時會建立Looper,Looper物件的建立又建立了MessageQueue