Android面試常問問題-Handler機制

昨天面試官問的是一個線程中能不能創建多個Handler對象?

本以爲對Handler機制挺了解了,可還是懵了,項目裏沒有遇到過這種情況,首先答案是肯定的,能創建多個,下面再解釋下Handler發送消息的過程:

首先可以確定的是每個線程中只能有唯一的Looper和MessageQueue,通過ThreadLocal來保證唯一性,當線程中初始化第一個Handler時就會和當前線程的Looper和MessageQueue進行綁定(Handler構造器中是這樣寫的:mLooper = Looper.myLooper(); mQueue = mLooper.mQueue();),而之後其他的Handler初始化的時候會直接獲取第一個Handler初始化時創建的Looper和MessageQueue。

既然MessageQueue對於Handler是一對多的, 所以在Handler通過Looper循環查詢MessageQueue獲取消息的時候,首先分析消息中的參數,確定消息對應的Handler,然後分發到指定的Handler進行處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章