對於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):指定多少毫秒發送消息
Message:Handler接收和處理的消息對象。
Looper:每個線程只能擁有一個Looper,它的loop方法負責讀取MessageQueue中的消息,讀到消息之後就交給發送消息的Handler進行處理。(好像就相當於消息隊列和Handler的信使)
MessageQueue:消息隊列,採用隊列的方式來管理message,程序每創建一個Looper對象,就會相應的創建MessageQueue對象,Looper負責對消息隊列的管理。