Android中訊息機制詳解

2021-07-26 18:40:21 字數 1487 閱讀 2318

android 執行緒問題主要概念

1、messagequeue:是一種資料結構,見名知義,就是乙個訊息佇列,存放訊息的地方。每乙個執行緒最多隻可以擁有乙個messagequeue資料結構。建立乙個執行緒的時候,並不會自動建立其messagequeue。通常使用乙個looper物件對該執行緒的messagequeue進行管理。主線程建立時,會建立乙個預設的looper物件,而looper物件的建立,將自動建立乙個message queue。其他非主線程,不會自動建立looper,要需要的時候,通過呼叫prepare函式來實現。

2、message:訊息物件,message queue中的存放的物件。乙個message queue中包含多個message。message例項物件的取得,通常使用message類裡的靜態方法obtain(),該方法有多個過載版本可供選擇;它的建立並不一定是直接建立乙個新的例項,而是先從message pool(訊息池)中看有沒有可用的message例項,存在則直接取出返回這個例項。如果message pool中沒有可用的message例項,則才用給定的引數建立乙個message物件。呼叫removemessages()時,將message從message queue中刪除,同時放入到message pool中。除了上面這種方式,也可以通過handler物件的obtainmessage()獲取乙個message例項。

3、looper:是messagequeue的管理者。每乙個messagequeue都不能脫離looper而存在,looper物件的建立是通過prepare函式來實現的。同時每乙個looper物件和乙個執行緒關聯。通過呼叫looper.mylooper()可以獲得當前執行緒的looper物件建立乙個looper物件時,會同時建立乙個messagequeue物件。除了主線程有預設的looper,其他執行緒預設是沒有messagequeue物件的,所以,不能接受message。如需要接受,自己定義乙個looper物件(通過prepare函式),這樣該執行緒就有了自己的looper物件和messagequeue資料結構了。looper從messagequeue中取出message然後,交由handler的handlemessage進行處理。處理完成後,呼叫message.recycle()將其放入message pool中。

4、handler:訊息的處理者,handler 負責將需要傳遞的資訊封裝成message,通過呼叫handler 物件的obtainmessage()來實現;將訊息傳遞給looper,這是通過handler 物件的sendmessage()來實現的。繼而由looper將message放入messagequeue中。當looper物件看到messagequeue中含有message,就將其廣播出去。該handler 物件收到該訊息後,呼叫相應的handler 物件的handlemessage()方法對其進行處理。

在android的activity中有各種各樣的事件,而這些事件最終是轉換為訊息來處理的。

android中的訊息系統涉及到:

* 訊息傳送

* 訊息佇列

* 訊息迴圈

* 訊息分發

* 訊息讀取

Android中的訊息機制

今天 android中的訊息機制,主要包括訊息的傳送 接收以及與執行緒之間的關係。完成這一過程主要需要以下三個類的協作 looper,handler,messagequeue。先給出乙個總體圖 每乙個looper都會和乙個執行緒繫結。要建立乙個新的looper並將它同當前的執行緒繫結起來,你必須要呼...

Android訊息機制

looper執行緒 主人 的 message queue 郵箱 唯一的管理人員 handler快遞小哥 跟管理人員looper溝通,送 push 新郵件 訊息 讓管理人員looper代簽扔進郵箱 message queue,也接收管理人員從郵箱拿出來的件。message queue 訊息佇列 主人的...

android 訊息機制

color green 一 角色描述 1.looper 乙個執行緒可以產生乙個looper物件,由它來管理此執行緒裡的message queue 訊息佇列 2.handler 你可以構造handler物件來與looper溝通,以便push新訊息到message queue裡 或者接收looper 從...