Android訊息機制

2021-09-11 09:30:18 字數 945 閱讀 5377

參考文章:

答案在於:threadlocal。

看**一下子就可以知道了:

一開始就構造了乙個looper,我們看looper.mylooper()做了什麼。

可以 看到就是呼叫了一下sthreadlocal.get()。看一下sthreadlocal的定義:

這裡說,如果不呼叫prepare()方法就會返回空,我們去看一下prepare方法:

就是呼叫了threadlocalset方法:

建立乙個threadlocalmap,賦值給t中的threadlocals物件。threadlocalmap是什麼?

當new threalocalmap的時候,做了什麼事情?

看到這裡其實也可以明白一點了,threadlocal採用了陣列 + entry的方式來模擬map,key採用的是threadlocal的唯一標識,value就是你傳遞進來的資料(這裡指looper),然後把這個threadlocal物件給到thread(執行緒)中的乙個成員變數。當要取的時候,取出這個成員變數,獲取threadlocal的唯一標識,就可以獲取到我們之前儲存的資料(也就是looper)。

我們可以通過get方法驗證一下,應該就是通過threadlocal的唯一標識,獲得對應的entry,然後從裡面取出對應的looper

答:因為android的ui執行緒是不安全的,如果多執行緒併發訪問,會導致ui控制處於不可預期的狀態。

答:缺點有兩個:

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訊息機制 一

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