messenger:信使
官方文件解釋:它引用了乙個handler物件,以便others能夠向它傳送訊息(使用 msg)方法)。該類允許跨程序間基於message的通訊(即兩個程序間可以通過message進行通訊),在服務端使用handler建立乙個messenger,客戶端持有這個messenger就可以與服務端通訊了。
以前我們使用handler+message的方式進行通訊,都是在同乙個程序中,從執行緒持有乙個主線程的handler物件,並向主線程傳送訊息。
而android既然可以使用bindler機制進行跨進行通訊,所以我們當然可以將handler與bindler結合起來進行跨程序傳送訊息。
檢視api就可以發現,messenger就是這種方式的實現。
一般使用方法如下:
1。遠端通過
j**a**
1. mmessenger=newmessenger(mhandler)
建立乙個信使物件
2。客戶端使用bindlerservice請求連線遠端
3。遠端onbind方法返回乙個bindler
j**a**
1. 4.客戶端使用遠端返回的bindler得到乙個信使(即得到遠端信使)
j**a**
1. publicvoidonserviceconnected(componentnamename,ibinderservice)
這裡雖然是new了乙個messenger,但我們檢視它的實現
j**a**
1. /**
2. *createamessengerfromarawibinder,whichhadpreviouslybeen
3. *retrievedwith.
4. *
5. *@.
6. */
7. publicmessenger(ibindertarget)
發現它的mtarget是通過aidl得到的,實際上就是遠端建立的那個。
5。客戶端可以使用這個遠端信使物件向遠端傳送訊息:
這樣遠端服務端的handler物件就能收到訊息了,然後可以在其handlermessage(message msg)方法中進行處理。(該handler物件就是第一步服務端建立messenger時使用的引數mhandler).
經過這5個步驟貌似只有客戶端向服務端傳送訊息,這樣的訊息傳遞是單向的,那麼如何實現雙向傳遞呢?
首先需要在第5步稍加修改,在send(msg)前通過 = mmessenger將自己的信使設定到訊息中,這樣服務端接收到訊息時同時也得到了客戶端的信使物件了,然後服務端可以通過
j**a**
1. //得到客戶端的信使物件,並向它傳送訊息
2. cmessenger=
3. 即完成了從服務端向客戶端傳送訊息的功能,。
雙向通訊宣告完成。
下面改寫apidemos工程實現messenger通訊
j**a**
1. 2.
3. 4.
5. 6.
7. 8.
9. 10.
11.12.
13.14. publicclassmessengerserviceextendsservice
24.25. @override
26. publicbooleanonunbind(intentintent)
31.32. staticfinalintmsg_register_client=1;
33. staticfinalintmsg_unregister_client=2;
34. staticfinalintmsg_set_value=3;
35.36. privaterandomrandom=newrandom();
37.38. privatehandlermhandler=newhandler()catch(remoteexceptione)
58. break;
59. default:
60.61. }
62.63. }
64. };
65.66. /**
67. *自己的信使物件
68. */
69. privatemessengermmessenger=newmessenger(mhandler);
70.71. /**
72. *客戶的信使
73. */
74. privatemessengercmessenger;
75.76. @override
77. publicibinderonbind(intentintent)
83.84. @override
85. publicvoidonrebind(intentintent)
90.91. }
j**a**
《春天的訊息》教學反思
一 非常感謝百忙之餘來華景小學聽課並給與指導的老師們,同時,我也要感謝我們科組老師,說實話,能上這次公開課,她們給了我很大的幫助,平常我們利用學校教研時間集體備課幫我修改教案的不足,做為新老師雖然有壓力但是感覺還是很幸福,真的很感謝她們。二 就這節課而言,我和科組老師還是認真的去準備,起初是為前一段...
《春的訊息》教學反思
伴隨著春的腳步,新的學期已經來到。開啟新的單元,撲面而來的是春天 春雨帶來的春的訊息。新學期,新起點,樹新思,立新意 這是我為本學期的教學反思尋找的新的起點。本單元的文化主題是 走進春天 學習本單元要從兩個方面入手 首先,要感受自然界春光的美好,置身於大自然的懷抱,用心體驗,感受春天帶給自然萬物的變...
使用框架跨域執行不丟失session的方法
前幾天因為一企業 內有一客戶的服務系統,那個 因為是租用的空間,不足以存放客戶系統,所以另外搞了個伺服器,為了使網域名稱的統一性 另乙個伺服器的網域名稱與原網域名稱差別過大 所以把這個客戶系統用框架包含在了原來的 內,但碰到了因為跨域操作而使客戶系統使用者登陸後發生session丟失的問題,困撓了一...