歷史遺留:主線程不能被阻塞
問題:重新整理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...