Handler消息傳遞機制

Handler消息傳遞機制
 對於android來說,ui非常重要,所以爲了保證ui的性能,google公司吧ui設計成了線程不安全的(速度快),並且只允許主線程對ui組件進行修改,但是在實際的項目中,這是行不通的,因爲很多時候,我們需要在子線程中動態的對ui進行修改,這樣就產生了消息傳遞機制。
 此機制主要由Handler來實現
  主要作用:
   1.在新啓動的線程中發送消息。
   2.在主線程中接收,處理消息。
 其主要原理就是回調機制:新的線程首先發送一個消息,發送到MessageQueue中,然後Handler會源源不斷的從中獲取消息進行處理,而處理的方法在自己(Handler)中,所以要回調自己的方法。
 方法:
  void handleMessage(Message msg);處理消息的方法,通常被重寫。
  final boolean hasMessages(int what):檢查消息隊列中是否包含what屬性爲指定值得消息。
  final boolean hasMessages(int what,Object object):檢查消息隊列中是否包含以what爲指定值,並且object爲指定對象的消息。
  多個重載的Message obtainMessage():獲取消息
  sendEmptyMessage(int what):發送空消息
  final boolean sendEmptyMessageDelayed(int what,long delayMillis):指定多少毫秒之後發送空消息
  final boolean sendMessage(Message msg);立即發送消息
  final boolean sendMessageDelayed(Message msg,long delayMillis):指定多少毫秒發送消息

Handler,Loop,MessageQueue的工作原理
 Message:Handler接收和處理的消息對象。
 Looper:每個線程只能擁有一個Looper,它的loop方法負責讀取MessageQueue中的消息,讀到消息之後就交給發送消息的Handler進行處理。(好像就相當於消息隊列和Handler的信使)
 MessageQueue:消息隊列,採用隊列的方式來管理message,程序每創建一個Looper對象,就會相應的創建MessageQueue對象,Looper負責對消息隊列的管理。

 主線程中有寫好的Looper,所以可以直接接收消息,而自己定義的子線程要自己寫Looper,才能接受消息(MessageQueue和Looper都是在接受消息的線程中).
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章