Android Handler機制理解
什麼是Handler?
Handler是Android系統給我們提供的一套用來更新UI的機制,也是一套訊息處理機制,我們可以使用Handler來發送訊息,也可以通過它來處理訊息
Android中為什麼要提供訊息機制
我們都知道在android中有兩個規定:
1. 網路請求操作要放到子執行緒。
2. 不能在子執行緒更新UI。所以Android中必須有執行緒間的通訊機制。那麼為什麼要有這兩個規定呢?
耗時操作為什麼要放在子執行緒中?
答:如果在主執行緒一直執行程式碼,那麼介面就會卡頓,為了提高使用者體驗,android增加了ANR機制,即介面長時間沒有響應就會出現ANR。我們在開發中既為了避免介面卡頓,又避免出現ANR所以把耗時的操作放在子執行緒中。
Handler四大類?
Message:訊息,其中包含了訊息Id,訊息處理物件以及處理的資料等,由MessageQuery統一管理,再交由Handler處理。
Handler:處理者,用於Message的傳送與處理,使用Handler時需實現handlermessage(Message msg)方法來對特定的Mess處理,例如更新Ui等。
MessageQuery:訊息佇列,用來存放Handler傳送過來的訊息,並且是按照FIFO的規則執行,存放Message並不是實際意義的儲存,而是將Message以連結串列的方式串聯起來的,等待Looper的抽取
Looper:訊息泵,不斷地從MessageQuery中抽取Message,所以,一個MessageQuery需要一個Looper。
四大類使用概述總結?
1.在類中建立Handler物件,用來接收和處理訊息
2.然後再建立一個Loop物件,用來管理MessageQueue
3.MessageQueue來接收和儲存子執行緒發過來的訊息
4.上面只是做好接收訊息的準備,做好相關準備後,才會讓子執行緒傳送訊息
5.子執行緒直接呼叫Handler物件,通過Handler物件的SendMessage方法來對主執行緒傳送資料
6.訊息是儲存在MessageQueue物件中的
7.Loop控制MessageQueue傳遞訊息給Handler物件,這裡就要注意了,雖然概念上說的是Handler能對子執行緒的資料進行接收和處理。但實際上它是接收MessageQueue裡面的資料,然後進行處理的,MessageQueue裡面可以接收很多很多的資料,它們以佇列的形式排列,當Handler處理完一個數據後,MessageQueue就會再傳遞下一個資料給Handler。
8.上面是要重點理解的機制過程,MessageQueue物件記憶體放很多子執行緒發來的資訊,有序的儲存下來,並不做處理。而Handler一次只接收MessageQueue物件傳來的一個數據,並進行處理。
9.這是最後一步了,Handler物件對傳來的資訊進行判斷,並作相應的行為。