android使用Messenger綁定Service的多種實(shí)現(xiàn)方法
如果你需要在不同進(jìn)程間通信,你可以在Service中使用Messenger來實(shí)現(xiàn)進(jìn)程中通信。
如果使用這種方式,Service中需要定義一個(gè)Handler對(duì)象(負(fù)責(zé)對(duì)客戶端發(fā)送過來的Message進(jìn)行響應(yīng))。
Messenger可以共享給client一個(gè)IBinder對(duì)象,client通過這個(gè)IBinder對(duì)象向Service發(fā)送Message,而前面提到的Handler對(duì)象是這一切的基礎(chǔ)。
注:使用這種方式進(jìn)行通信是不支持多線程的。
那就讓我們來看看使用這種方式進(jìn)行通信吧!
注:Service在聲明時(shí)必須對(duì)外開放,即android:exported="true",且本文是通過Intent啟動(dòng)的Service,所以在聲明時(shí)該Service可以接收特定的Action。
1、在Service中創(chuàng)建一個(gè)Handler對(duì)象,來處理從client發(fā)過來的Message
2、根據(jù)創(chuàng)建的Handler對(duì)象創(chuàng)建一個(gè)Messenger對(duì)象
3、使用Messenger的getBinder方法得到一個(gè)IBinder對(duì)象,并在Service的onBind方法中將其反出去
4、client在onServiceConnected中根據(jù)IBinder參數(shù)創(chuàng)建一個(gè)Messenger對(duì)象(可參考Messenger的構(gòu)造函數(shù))
5、client可以使用上一步得到的Messenger對(duì)象來給Service發(fā)送Message了
經(jīng)過上面的五部我們就能讓client與Service進(jìn)行通信。client使用Messenger對(duì)象給Service發(fā)送Message后,Service中的Handler將會(huì)對(duì)消息作出響應(yīng)。
上面實(shí)現(xiàn)的僅僅是單向通信,即client給Service發(fā)送消息,如果我需要Service給client發(fā)送消息又該怎樣做呢?
其實(shí),這也是很容易實(shí)現(xiàn)的,下面就讓我們接著上面的步驟來實(shí)現(xiàn)雙向通信吧~
6、在client中創(chuàng)建一個(gè)Handler對(duì)象,用于處理Service發(fā)過來的消息
7、根據(jù)client中的Handler對(duì)象創(chuàng)建一個(gè)client自己的Messenger對(duì)象
8、我們?cè)诘?步的時(shí)候獲得了Service的Messenger對(duì)象,并通過它來給Service發(fā)送消息。這時(shí)候,我們將client的Messenger對(duì)象賦給待發(fā)送的Message對(duì)象的replyTo字段
9、在Service的Handler處理Message時(shí)將client的Messenger解析出來,并使用client的Messenger對(duì)象給client發(fā)送消息
這樣我們就實(shí)現(xiàn)了client和Service的雙向通信。client和Service都有自己的Handler和Messenger對(duì)象,使得對(duì)方可以給自己發(fā)送消息,值得注意的是client的Messenger是通過Message的replyTo傳遞給Service的。
相關(guān)文章
Android Studio使用教程(六):Gradle多渠道打包
這篇文章主要介紹了Android Studio使用教程(六):Gradle多渠道打包,本文講解了友盟多渠道打包、assemble結(jié)合Build Variants來創(chuàng)建task、完整的gradle腳本等內(nèi)容,需要的朋友可以參考下2015-05-05
Android5.0以上實(shí)現(xiàn)全透明的狀態(tài)欄方法(仿網(wǎng)易云界面)
下面小編就為大家分享一篇Android5.0以上實(shí)現(xiàn)全透明的狀態(tài)欄方法(仿網(wǎng)易云界面),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android系統(tǒng)關(guān)機(jī)的全流程解析
這篇文章主要介紹了Android系統(tǒng)關(guān)機(jī)的全流程解析,從上層空間一直深入到內(nèi)核全面講解,非常推薦!需要的朋友可以參考下2016-02-02
Android convinientbanner頂部廣告輪播控件使用詳解
這篇文章主要為大家詳細(xì)介紹了Android convinientbanner頂部廣告輪播控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Android實(shí)現(xiàn)網(wǎng)易新聞客戶端首頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)網(wǎng)易新聞客戶端首頁(yè)效果的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android?nonTransitiveRClass資源沖突問題淺析
這篇文章主要介紹了Android?nonTransitiveRClass資源沖突問題,別搞錯(cuò)了,nonTransitiveRClass不能解決資源沖突,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12
Android Intent實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的兩種方法
這篇文章主要介紹了Android Intent實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的兩種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05

