解析非同步訊息處理機制

2021-06-28 18:21:22 字數 1106 閱讀 5806

android 中的非同步訊息處理主要由四個部分組成,message、handler、messagequeue 和looper。其中 message 和 handler 在上一小節中我們已經接觸過了,而 messagequeue 和 looper對於你來說還是全新的概念,下面我就對這四個部分進行一下簡要的介紹。

程之間交換資料。上一小節中我們使用到了 message 的 what 字段,除此之外還可以使用 arg1 和 arg2 欄位來攜帶一些整型資料,使用 obj 字段攜帶乙個 object 物件。

2. handler

handler 顧名思義也就是處理者的意思,它主要是用於傳送和處理訊息的。傳送訊息一般是使用 handler 的 sendmessage()方法,而發出的訊息經過一系列地輾轉處理後,最終會傳遞到 handler 的 handlemessage()方法中。

3. messagequeue

messagequeue 是訊息佇列的意思,它主要用於存放所有通過 handler 傳送的訊息。這部分訊息會一直存在於訊息佇列中,等待被處理。每個執行緒中只會有乙個 messagequeue物件。

4. looper

looper 是每個執行緒中的 messagequeue 的管家,呼叫 looper 的 loop()方法後,就會進入到乙個無限迴圈當中,然後每當發現 messagequeue 中存在一條訊息,就會將它取出,並傳遞到 handler 的 handlemessage()方法中。每個執行緒中也只會有乙個 looper 物件。了解了 message、handler、messagequeue 以及 looper 的基本概念後,我們再來對非同步

訊息處理的整個流程梳理一遍。首先需要在主線程當中建立乙個 handler 物件,並重寫handlemessage()方法。然後當子執行緒中需要進行 ui 操作時,就建立乙個 message 物件,並通過 handler 將這條訊息傳送出去。之後這條訊息會被新增到 messagequeue 的佇列中等待被處理,而 looper 則會一直嘗試從 messagequeue 中取出待處理訊息,最後分發回 handler的 handlemessage()方法中。由於 handler 是在主線程中建立的,所以此時 handlemessage()方法中的**也會在主線程中執行,於是我們在這裡就可以安心地進行 ui 操作了。 

解析非同步訊息處理機制

android中的非同步訊息處理主要由4個部分組成 message,handler,messagequeue和looper。下面我就對這4個部分進行一下簡要的介紹。handler handler顧名思義也就是處理者的意思,它主要是用於傳送和處理訊息的。傳送訊息一般使用handler的sendmess...

Android 解析非同步訊息處理機制

android中的非同步訊息處理主要由四部分組成,message handler messagequeue looper.1.message message是執行緒之間傳遞的訊息,它可以在內部攜帶少量的資訊,用於在不同執行緒之間交換資料。message有what欄位,除此以外,還可以使用arg1和a...

Android 解析非同步訊息處理機制

android中的非同步訊息處理主要有四個部分組成 message handle messagequeue和looper 1.message message是執行緒之間傳遞的訊息,它可以在內部攜帶少量的資訊,用於在不同執行緒之間交換資料 2.handler 主要用於傳送和處理訊息的。傳送訊息一般是使...