Handler,Message,MessageQueue,Looper

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消息機制的大體情況。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容