Android 的訊息機制

2021-09-24 06:54:02 字數 1448 閱讀 3310

handler是android的訊息機制的上層介面,這使得在開發過程中只需要和handler互動即可,通過它可以很輕鬆地將乙個任務切換到handler所在的執行緒中去執行。

android的訊息機制主要是指handler的執行機制,handler的執行需要底層的messageqeuelooper的支撐。

messagequeue內部儲存結構並不是真正的佇列,而是採用單鏈表的資料結構來儲存訊息列表。

looper會以一種無限迴圈的形式去查是否有新訊息,如果有的話就處理訊息,否則就一直等待著。looper還有乙個特俗的概念就是threadlocal,

threaedlocal並不是執行緒,它的作用就是可以在每個執行緒中儲存資料。handler 建立的時候採用當前執行緒的 looper 來構造訊息迴圈系統,那麼 hnalder 內部是如何來獲取到當前 looper 的呢

執行緒預設沒有 looper ,如果需要使用 handler 就必須為執行緒建立 looper ,我們經常提到的主線程也就是ui執行緒, activitythread ,在建立時就會初始化looper , 這也是主線程中預設 可以使用 handler的原因

handler主要功能是將乙個任務切換到某個指定執行緒中,為什麼需要這個功能呢

這是因為 android 規定訪問 ui 只能在主線程中進行,如果子執行緒訪問ui 會丟擲異常

系統為什麼不允許子執行緒中訪問ui呢?

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

為什麼系統不對ui控制項的訪問加上鎖機制呢?

缺點有兩個:

handler 建立時會採用當前執行緒的 looper 來構建內部的訊息迴圈系統,如果當前執行緒沒有 looper ,那麼就會報錯

handler的本質是更新ui?

這的確沒錯,但是更細nui僅僅是handler的乙個特殊使用場景。具體來說:又是以後需要在子執行緒中進行耗時的i/o操作,可能是讀取檔案或者訪問網路等,我們不能在子執行緒中訪問ui控制項,否則就會出發程式異常,這個時候通過handler就可以將更新ui的操作切換到主線程中執行。

Android的訊息機制

android的訊息機制主要是指handler的執行機制,而handler的執行離不開messagequeue和looper的支撐。其中messagequeue稱為訊息佇列,用作儲存一組訊息,並以佇列的形式對外提供插入和刪除工作 具體實現 使用單鏈表的結構來儲存訊息列表 messagequeue不能...

Android的訊息機制

android 有一種叫訊息佇列的說法,這裡我們可以這樣理解 假如乙個隧道就是乙個訊息佇列,那麼裡面的每一部汽車就是乙個乙個訊息,這裡我們先忽略掉超車等種種因素,只那麼先進隧道的車將會先出,這個機制跟我們android 的訊息機制是一樣的。一 角色描述 1.looper 相當於隧道 乙個執行緒可以產...

Android訊息機制

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