handler在哪個activity或者service執行緒建立,那麼looper就和哪乙個執行緒進行了繫結。如果是自己建立的執行緒那麼就要使用looper中的prepare函式來繫結了。在handler建立後就例項化了乙個looper並關聯了乙個訊息佇列mq。
在其他的傳送訊息的執行緒中(接受執行緒必須要把handler的例項物件傳送給傳送執行緒),使用建立的handler來呼叫handler.sendmessage()函式就會指定msg.target為本handler。然後在接受執行緒中對handler.dispathmessage進行複寫來實現對傳送執行緒傳送訊息的處理。
乙個視窗被建立,它會有乙個訊息迴圈處理模組,比如:
c/c++ code
? 1
2
3
4
5
while
( getmessage(&msg, null, 0, 0))
其中 getmessage 是從訊息佇列中獲取訊息,它會進入 pretranslatemessage 給我們提供過濾訊息佇列的機會, 如果返回true,就交由 translatemessage 和 dispatchmessage 處理。其中通過 sendmessage 傳送的訊息是不插入訊息佇列,而直接傳遞到 translatemessage 處理,postmessage 是會經過訊息佇列的。
現在對應於duilib 如下:
duilib中 的視窗過程函式 是 handlemessage,
訊息過濾函式是 messagehandler
即:while( getmessage(&msg, null, 0, 0))// 這裡進入messagehandler
handler通訊機制
android應用開發有個預設規則,不在ui執行緒做耗時操作。耗時操作結果反饋給使用者也不能直接更新ui。耗時操作必須開子執行緒去做,實現的方式很多,handler asynctask service。每個人偏好不同,但是各有各的優點,根據不同的需求選擇適當的實現方式,是我一直追求的目標,每一種至少...
程序間通訊機制(IPC)
1.訊號機制 主要用於向乙個或多個程序發非同步事件訊號,訊號可以通過鍵盤中斷觸發,也可以有程序訪問虛擬記憶體中不存在的位址這樣的錯誤來產生。訊號機制還可以用於shell向它們的子程序傳送作業控制命令。linux使用存貯在每個程序task struct結構中的資訊實現訊號機制,它支援的訊號數受限於處理...
程序 執行緒間通訊機制
管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序。有名管道也是半雙工的通訊方式,但是它允許無親緣關係的程序間通訊。訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問...