android訊息處理系統
1.handler
handler可以分發message物件和runnable物件到主線程中, 每個handler例項,都會繫結到建立他的執行緒中(一般是位於主線程),
它有兩個作用: (1): 安排訊息或runnable 在某個主線程中某個地方執行, (2)安排乙個動作在不同的執行緒中執行
mlooper---------looper.mylooper()
mqueue----------mlooper.mqueue--------looper::mqueue
//傳送乙個訊息
sendmessage(message msg)
//接受乙個訊息進行處理
dispatchmessage(message msg)
2.looper
(1) looper類別用來為乙個執行緒開啟乙個訊息迴圈。預設情況下android中新誕生的執行緒是沒有開啟訊息迴圈的。(主線程除外,主線程系統會自動為其建立looper物件,開啟訊息迴圈)
looper物件通過messagequeue來存放訊息和事件。乙個執行緒只能有乙個looper,對應乙個messagequeue。
(2) 通常是通過handler物件來與looper互動的。handler可看做是looper的乙個介面,用來向指定的looper傳送訊息及定義處理方法。
開啟訊息迴圈呼叫如下
重要成員變數及函式:
threadlocalsthreadlocal;
messagequeue mqueue;
prepare()
loop() }
mylooper()
3.message
重要成員變數及函式
int what
int arg1;
int arg2;
handler target;
message next;
object obj;
message obtain()
recycle()
4.訊息佇列messagequeue
重要成員變數及函式
message mmessages;
arraylistmidlehandlers;
idlehandler mpendingidlehandlers;
message next()
enqueuemessage(message msg)
removemessage(message msg)
訊息處理流程
1.activity在啟動時會通過activitythread呼叫looper.preparemainlooper()和looper.loop()開啟訊息迴圈
傳送乙個訊息
2.handler.sendmessage(msg);
3.handler::mqueue::enqueuemessage(msg);
即looper::mqueue(msg);
訊息被壓入訊息佇列
4.在looper::loop()中處理訊息;
5.msg.dipatchmessage(msg);
5.handler::handlemessage(msg);
eg:***activity extends activity }
};...
new thread()
}.start(); }
Android非同步訊息處理Handler的使用
眾所周知,android的ui執行緒是不安全的,其它執行緒不可以直接操作ui。那麼就產生了乙個問題 android非同步訊息處理 如何在其它執行緒進行ui更新操作。由於ui都是由主線程繪製的,在進行耗時操作的時候會導致主線程繁忙,最後導致ui介面卡頓或無反應,所以在進行耗時操作的時候我們應該新建一條...
android 訊息處理機制
首先還是推薦幾篇部落格 再來說說我的理解 訊息處理機制適用場景 比如 a 類中要控制ui介面類很多元件的屬性值,可以傳參,可以設定static,但這在有大量元件屬性值需要變化時就行不通了,這時可以運用訊息處理機制在 中通知ui介面類,在介面類中改變屬性值,並重新繪製ui.b 需要在另外的執行緒中改變...
Android訊息處理機制 二
角色綜述 回顧 1 ui thread 通常就是main thread,而android啟動程式時會替它建立乙個messagequeue。2 當然需要乙個looper物件,來管理該messagequeue。3 我們可以構造handler物件來push新訊息到message queue裡 或者接收lo...