簡單理解Android訊息機制

2021-09-10 04:52:20 字數 917 閱讀 3383

關於安卓的訊息處理機制問題,網上說了比較多,很多都拋上源**去解析,但我其實很不喜歡去乙個個研究源**,雖然現實就是要去看源**比較好,本篇部落格主要用乙個簡單的例子來講講怎麼處理。

**問題:按下**按鈕,**數字從1開始快速滾動到60,不斷迴圈…

現象:只會顯示一次數字,並且顯示之後閃退。(不正確)

原因:android規定只能在主線程進行ui操作,而我們自己建立的子執行緒是不可以改變ui介面的。

試想一下,如果子執行緒都可以改變ui介面,那麼若是眾多子執行緒一起操作,就是不斷在訪問主線程的變數,這就會造成執行緒安全問題,所以android的訊息處理機制應運而生

解決:我們使用 handler。

**詳解:**android的訊息機制其實主要是指handler的執行機制,handler又需要messagequeue和looper的參與。通俗來說:當介面需要進行互動的時候,子執行緒只需要把訊息傳送到主線程裡,主線程會先把訊息儲存到訊息佇列,同時主線程的looper通過不斷地對messagequeue進行輪詢,如果有訊息那就交給對應的handler的子執行緒去處理,如果沒有訊息的話,主線程就會先阻塞著,等待處理訊息。

messagequeue:訊息佇列,其實叫它佇列只是源於它工作的方式和佇列比較像,是先進先出,誰的訊息先到,就處理誰的,而訊息真正的儲存方式應該是單鏈表,插入和刪除元素方便,都是o(1)。enqueuemessage,removemessages,removecallbacksandmessages,next等方法可以參見messagequeue類。

handler:主要是收發訊息,我們需要建立handler子類物件,並重寫handlemesaage方法。

最近才接觸這個,目前理解到這的就是這些啦!

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 從...

Android訊息機制

參考文章 答案在於 threadlocal。看 一下子就可以知道了 一開始就構造了乙個looper,我們看looper.mylooper 做了什麼。可以 看到就是呼叫了一下sthreadlocal.get 看一下sthreadlocal的定義 這裡說,如果不呼叫prepare 方法就會返回空,我們去...