Android進程間通訊之messenger-創(chuàng)新互聯(lián)

平時一說進程間通訊,大家都會想到AIDL,其實messenger和AIDL作用一樣,都可以進行進程間通訊。它是基于消息的進程間通信,就像子線程和UI線程發(fā)送消息那樣,是不是很簡單,還不用去寫AIDL文件,是不是有點小爽。哈哈。

創(chuàng)新互聯(lián)建站2013年開創(chuàng)至今,是專業(yè)互聯(lián)網技術服務公司,擁有項目成都網站建設、做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元安國做網站,已為上家服務,為安國各地企業(yè)和個人服務,聯(lián)系電話:13518219792

此外,還支持記錄客戶端對象的Messenger,然后可以實現一對多的通信;甚至作為一個轉接處,任意兩個進程都能通過服務端進行通信。

與 AIDL 比較:

當您需要執(zhí)行 IPC 時,為您的接口使用 Messenger 要比使用 AIDL 實現更加簡單,因為 Messenger 會將所有服務調用排入隊列,而純粹的 AIDL 接口會同時向服務發(fā)送多個請求,服務隨后必須應對多線程處理。

對于大多數應用,服務不需要執(zhí)行多線程處理,因此使用 Messenger 可讓服務一次處理一個調用。如果您的服務必須執(zhí)行多線程處理,則應使用 AIDL 來定義接口。

接下來看下怎么寫:

服務端:

1.創(chuàng)建一個handler對象,并實現hanlemessage方法,用于接收來自客戶端的消息,并作處理

2.創(chuàng)建一個messenger(送信人),封裝handler

3.messenger創(chuàng)建一個IBinder對象,通過onBind返回給客戶端

客戶端:

1.在activity中綁定服務

2.創(chuàng)建ServiceConnection并在其中使用IBinder 將 Messenger實例化

3.使用Messenger向服務端發(fā)送消息

4.解綁服務

5.服務端中在 handleMessage()方法中接收每個 Message

這樣,客戶端并沒有調用服務的“方法”。而客戶端傳遞的“消息”(Message 對象)是服務在其 Handler 中接收的。

上面實現的僅僅是單向通信,即客戶端給服務端發(fā)送消息,如果我需要服務端給客戶端發(fā)送消息又該怎樣做呢?

其實,這也是很容易實現的,下面就讓我們接著上面的步驟來實現雙向通信吧

1.在客戶端中創(chuàng)建一個Handler對象,用于處理服務端發(fā)過來的消息

2.創(chuàng)建一個客戶端自己的messenger對象,并封裝handler。

3.將客戶端的Messenger對象賦給待發(fā)送的Message對象的replyTo字段

4.在服務端的Handler處理Message時將客戶端的Messenger解析出來,并使用客戶端的Messenger對象給客戶端發(fā)送消息

這樣就實現了客戶端和服務端的雙向通信了。

注意:注:Service在聲明時必須對外開放,即android:exported="true";另外,我在開發(fā)完APP都會用一些APP在線自動化測試工具進行測試:www.ineice.com

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章題目:Android進程間通訊之messenger-創(chuàng)新互聯(lián)
分享URL:http://bm7419.com/article8/cdecip.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)Google、品牌網站設計網站收錄、用戶體驗、企業(yè)網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)