訊息列隊機制(個人理解)

2021-07-10 04:58:31 字數 845 閱讀 7672

歷史遺留:主線程不能被阻塞

問題:重新整理ui的**只能執行在主線程,執行在子執行緒是沒有任何效果的

解決問題:如果在子執行緒中重新整理ui,使用訊息列隊機制

提出方法:訊息列隊機制

* looper一旦發現message queue中有訊息,就會把訊息取出,然後把訊息扔給handler物件,handler會呼叫自己的handlemessage方法來處理這條訊息

* handlemessage方法執行在主線程

* 主線程建立時,訊息佇列和輪詢器物件就會被建立,但是訊息處理器物件,需要使用時,自行建立

//訊息佇列

handler handler = new handler()

};

* 在子執行緒中往訊息佇列裡發訊息

//建立訊息物件

message msg = new message();

//訊息的obj屬性可以賦值任何物件,通過這個屬性可以攜帶資料

msg.obj = bm;

//what屬性相當於乙個標籤,用於區分出不同的訊息,從而執行不能的**

msg.what = 1;

//傳送訊息

handler.sendmessage(msg);

* 通過switch語句區分不同的訊息

public void handlemessage(android.os.message msg)        

}

MFc訊息對映機制理解

何謂訊息 訊息處理函式 訊息對映?訊息簡單的說就是指通過輸入裝置向程式發出指令要執行某個操作。具體的某個操作是你的一系列 稱為訊息處理函式。在sdk中訊息其實非常容易理解,當視窗建立後便會有乙個函式 視窗處理函式 開始執行乙個訊息迴圈,我們還可以清楚的看到訊息處理的脈絡。乙個switch case語...

非同步訊息機制的理解

1 looper準備工作場地 sthreadlocal 和工作用的道具 messagequeue 2 handler可以理解為 該機制的外掛程式,在activity中,因為activitythread已經定義了looper,所以直接例項化hander就可以使用了 3 messagequeue是系統中...

簡單理解Android訊息機制

關於安卓的訊息處理機制問題,網上說了比較多,很多都拋上源 去解析,但我其實很不喜歡去乙個個研究源 雖然現實就是要去看源 比較好,本篇部落格主要用乙個簡單的例子來講講怎麼處理。問題 按下 按鈕,數字從1開始快速滾動到60,不斷迴圈 現象 只會顯示一次數字,並且顯示之後閃退。不正確 原因 android...