handler機制
1.在主線程中,建立乙個handler物件(你在**建立的handler就在那裡接收)
2.子執行緒通過handler傳送訊息message,呼叫sendmessage()方法將訊息傳送至messagerqueue訊息佇列中
3.然後主線程中的looper不斷從訊息從訊息佇列中取出訊息物件,通過msg.target.dispatchmessage(msg)方法,將訊息分發給對應的handler
4.主線程中dispagchmessage()方法中呼叫了handlemessage(),然後這方法在handler內部類重寫,執行處理訊息操作
(非主線程直接new乙個handler會出現
can't create handler inside thread that has not called looper.prepare()
異常,原因是非主線程沒有
loop物件,
所以要呼叫
looper.prepare()方法,
而且如果主線程給子執行緒傳送訊息,還要呼叫乙個
looper.loop()
的方法(
效果:無限從訊息佇列中取出訊息))
class loopt extends thread
};looper.loop();
looper.loop();必須放在主線程的下面,因為他需要handler的handlemessage(message msg)方法。 handler機制的原理
andriod提供了handler 和 looper 來滿足執行緒間的通訊。handler先進先出原則。looper類用來管理特定執行緒內物件之間的訊息交換 messageexchange 1 looper 乙個執行緒可以產生乙個looper物件,由它來管理此執行緒裡的messagequeue 訊息...
handler機制原理全面整理
1 handler用的最多是子執行緒傳送訊息到主線程修改ui 2 首先通過message中的obtain 從訊息池中獲取訊息物件 3 然後要建立handler物件,在handler的構造方法中就會得到輪詢器looper和訊息佇列,這個looper物件和訊息佇列是主線程建立的時候建立的,輪詢器就不斷的...
Binder機制的一些小感悟
在這裡針對看到的這些介紹寫一些自己的理解,以便加深下記憶。而這三種跨程序通訊的模式大致相同,都是採用的cs結構的通訊,而對於android為什麼採用binder作為其底層的程序間通訊?因為沒有研究過這三種跨程序通訊的源 不知其內部的執行原理,也就不誤導別人了。如我們前面所述,binder機制也是採用...