標籤:
Android中的非同步訊息處理主要有四個部分組成,Message, Handler, MessageQueue和 Looper.
1.Message。
線上程之間傳遞的訊息,可以內部攜帶少量的資訊,用於在不同線程之間交換資料。可以使用what欄位,arg1和arg2攜帶一些整型資料,obj欄位攜帶一個object對象。
2.Handler。
Handler,處理者的意思,它主要用於發送和處理訊息的。發送訊息一般使用Handler的sendMessage()方法,而發出的訊息經過一系列地輾轉處理後, 最終會傳遞到Handler的HandlerMessage()方法中。
3.MessageQueue。
訊息佇列的意思,主要用於存放所有通過Handler發送的訊息,這部分訊息會一直存放於訊息佇列中,等待被處理,每個線程中只會有一個MessageQueue對象。
4.Looper。
Looper是每個線程中的MesssageQueue的管家,調用Looper的loop()方法後,就會進入到一個無線迴圈中,然後每當發現MessageQueue中存在一條訊息,就會將他去除,並傳遞到Handler的handlerMessage()方法。每個線程中也只會存在一個Looper對象。
使用Handler處理非同步訊息的流程如下:
1.主線程中建立一個Handler對象,並重寫handlerMessage()方法。
2.在子線程中需要進行UI更新操作時,就建立一個Message對象,並通過Handler對象的sendMessage()方法將這條訊息發送出去
3.發出去的訊息被添加到了MessageQueue的隊列中等待被處理。
4.Looper則會一直嘗試從MessageQueure中取出等待被處理的訊息,然後分發給Handler的handlerMessage()方法。
5.由於Handler是在主線程中建立的,此時handlerMessage()方法中的代碼也會在主線程中運行,就可以更新UI操作了。
Android開發之非同步訊息處理機制Handler