Android進程間通訊之messenger

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

此外,還支持記錄客戶端對象的Messenger咕村,然后可以實現(xiàn)一對多的通信场钉;甚至作為一個轉(zhuǎn)接處,任意兩個進程都能通過服務(wù)端進行通信懈涛。

與AIDL比較:

當(dāng)您需要執(zhí)行IPC時逛万,為您的接口使用Messenger要比使用AIDL實現(xiàn)更加簡單,因為Messenger會將所有服務(wù)調(diào)用排入隊列肩钠,而純粹的AIDL接口會同時向服務(wù)發(fā)送多個請求泣港,服務(wù)隨后必須應(yīng)對多線程處理暂殖。

對于大多數(shù)應(yīng)用,服務(wù)不需要執(zhí)行多線程處理当纱,因此使用Messenger可讓服務(wù)一次處理一個調(diào)用呛每。如果您的服務(wù)必須執(zhí)行多線程處理,則應(yīng)使用AIDL來定義接口坡氯。

接下來看下怎么寫:

服務(wù)端:

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

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

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

客戶端:

1.在activity中綁定服務(wù)

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

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

4.解綁服務(wù)

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

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

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

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

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

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

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

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

這樣就實現(xiàn)了客戶端和服務(wù)端的雙向通信了。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妄呕,一起剝皮案震驚了整個濱河市陶舞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绪励,老刑警劉巖肿孵,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疏魏,居然都是意外死亡停做,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門大莫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛉腌,“玉大人,你說我怎么就攤上這事±哟裕” “怎么了舅巷?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長河咽。 經(jīng)常有香客問我钠右,道長,這世上最難降的妖魔是什么忘蟹? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任飒房,我火速辦了婚禮,結(jié)果婚禮上媚值,老公的妹妹穿的比我還像新娘狠毯。我一直安慰自己,他們只是感情好褥芒,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布嚼松。 她就那樣靜靜地躺著,像睡著了一般喂很。 火紅的嫁衣襯著肌膚如雪惜颇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天少辣,我揣著相機與錄音,去河邊找鬼羡蛾。 笑死漓帅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痴怨。 我是一名探鬼主播忙干,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼浪藻!你這毒婦竟也來了捐迫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤爱葵,失蹤者是張志新(化名)和其女友劉穎施戴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萌丈,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡赞哗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辆雾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肪笋。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藤乙,到底是詐尸還是另有隱情猜揪,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布坛梁,位于F島的核電站湿右,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏罚勾。R本人自食惡果不足惜毅人,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尖殃。 院中可真熱鬧丈莺,春花似錦、人聲如沸送丰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽器躏。三九已至俐载,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間登失,已是汗流浹背遏佣。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留揽浙,地道東北人状婶。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像馅巷,于是被迫代替她去往敵國和親膛虫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android跨進程通信IPC整體內(nèi)容如下 1钓猬、Android跨進程通信IPC之1——Linux基礎(chǔ)2稍刀、Andro...
    隔壁老李頭閱讀 3,600評論 3 12
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,152評論 25 707
  • 使用Bundle的方式我們知道在Android中三大組件(Activity,Service敞曹,Receiver)都支...
    wangling90閱讀 7,254評論 0 11
  • 我發(fā)現(xiàn)了账月,其實自己都能出書單了。比如我換工作以后异雁,我就想讀兒童心理學(xué)捶障、神經(jīng)學(xué)、家庭教育學(xué)纲刀、運動學(xué)项炼、教育學(xué)担平、情商、醫(yī)...
    不一樣的煙火sss閱讀 238評論 0 0
  • 何為成功?一次告白牽手锭部,一次考試第一暂论,還是一次賺一個億? 人人都可以給出許多類似或者大相徑庭的標(biāo)準(zhǔn)拌禾。但是取胎,這些...
    秋之燕閱讀 415評論 0 0