Handler的前世今生——總結篇

通俗地講,Android中的多線程通信就可以認爲是Handler機制。

在Handler的整個機制中,我們首先要知道四個部分:

  1. Message
  2. MessageQueue;
  3. Handler;
  4. Looper;

Message中的三個重要屬性:

  1. target —— 綁定Handler的;
  2. callback —— Handler 的post()相關方法和Message進行關聯的;
  3. when —— 消息延時及MessageQueue排序用的;

Looper 通過 ThreadLocal ,保證 ThreadMessageQueue 進行 綁定。


Handler 就是一個發送消息(send,post)和處理消息(handleCallback,handleMessage)的。


MessageQueue 纔是真正處理阻塞延時功能 的地方。
MessageQueue在next()方法中進行消息出隊列和阻塞處理;

如果nextPollTimeoutMillis=-1,一直阻塞不會超時。
如果nextPollTimeoutMillis=0,不會阻塞,立即返回。
如果nextPollTimeoutMillis>0,最長阻塞nextPollTimeoutMillis毫秒(超時),如果期間有程序喚醒會立即返回。

而且MessageQueue在enqueueMessage()時按照when進行排序的。


這裏還有很重要的一點:postDelayed() 和 sendMessageDelayed()是由一些區別的,postDelayed()的延遲是不夠精準的,畢竟線程是基於時間片的,中間過程不能預測的

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