Handler的主要兩個作用:1,周期性的發送和處理消息或者runnable 2,在不同的線程去響應不同的操作
Handler sendMessage和post最主要的區別是sendMessage攜帶Bundle數據過去, sendMessage必須子類實現handMessage,這兩者最終調用的都是sendMessageAtTime,只是sendMessage發送的是一個message,message可攜帶數據,而post發送的是一個空的message但是有一個runnable,ps:postAtTime可以帶一個object對象。
sendMessage的時候每次都會傳一個updateTime,正常的話就是當前時間
postAtFrontOfQueue可以將message放入隊列的頭部(原理是傳的when為0,所以會放在隊列的表頭)。一個線程有一個Looper,一個MessageQueue,多個handler和多個message
ThreadLocal里邊根據當前線程存放looper對象。
message的休眠原理,在入列的時候根據message時間來確定在隊列中的位置。
https://my.oschina.net/youranhongcha/blog/492591
同步分割欄:就是當looper不斷的從消息隊列里去消息,當遇到這個標志的話,會中斷同步消息的摘取,但會繼續摘取異步消息
關于Android的消息機制,我們就先說這么多。總體上的而言還是比較簡單的,無非是通過Handler向Looper的消息隊列中插入Message,而后再由Looper在消息循環里具體處理。因為消息隊列本身不具有鏈表一變動就能馬上感知的功能,所以它需要借助管道和epoll機制來監聽變動。當外界向消息隊列中打入新消息后,就向管道的“寫入端”寫入簡單數據,于是epoll可以立即感知到管道的變動,從何激發從消息隊列中摘取消息的動作。這就是Android消息機制的大體情況。