handler的處理機制

Handler主要是用於異步消息的處理,當發出一個消息之後,首先進入消息隊列(先進先出)也就是Message Queue,然後輪詢器Looper將消息隊列中的消息取出,最後對消息做出處理。這種機制通常被用來處理耗時比較長的操作。

  • 消息隊列:通過Handler發送的消息並是即刻執行的,因此需要一個隊列來維護
  • 工作線程:需要一個線程不斷摘取消息,並執行回調,這種線程就是Looper線程
  • 互斥機制,會有不同的線程向同一個消息隊列插入消息,這個時候就需要同步機制進行保證
  • 空消息隊列時候的同步機制,生產者消費者模型

注:android系統中不允許在子線程中不能更新UI,而只能必須在主線程(即UI線程)中進行更新;

每一條消息都需要被指定handler處理,而handler在這個時候就會創建消息,在創建消息之前會先查詢Message Queue中是否存在消息,如果有就可以直接從消息池中取出,如果沒有則重新初始化一個消息的實例。

主線程在初始化第一個handler的時候會通過ThreadLocal創建一個Looper,而這個looper則是和主線程一一對應的。而之後初始化的handler則會直接獲取第一個handler創建的looper。而在looper初始化的時候會創建一個Message Queue,這時候子線程向主線程發送消息時,handler會創建一個消息放入消息池。

上面提到了handler會創建一個消息放入消息池,之後looper就會去查詢消息隊列中是否存在消息,如果存在則取出,並根據消息的參數判斷所對應的handler,然後將消息傳給handler處理。

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