日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

绑定Service的三种实现方式之使用Messenger

發布時間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 绑定Service的三种实现方式之使用Messenger 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果你需要在不同進程間通信,你可以在Service中使用Messenger來實現進程中通信。

如果使用這種方式,Service中需要定義一個Handler對象(負責對客戶端發送過來的Message進行響應)。

Messenger可以共享給client一個IBinder對象,client通過這個IBinder對象向Service發送Message,而前面提到的Handler對象是這一切的基礎。

注:使用這種方式進行通信是不支持多線程的。

那就讓我們來看看使用這種方式進行通信吧!

注:Service在聲明時必須對外開放,即android:exported="true",且本文是通過Intent啟動的Service,所以在聲明時該Service可以接收特定的Action。

1、在Service中創建一個Handler對象,來處理從client發過來的Message

2、根據創建的Handler對象創建一個Messenger對象

3、使用Messenger的getBinder方法得到一個IBinder對象,并在Service的onBind方法中將其反出去

4、client在onServiceConnected中根據IBinder參數創建一個Messenger對象(可參考Messenger的構造函數)

5、client可以使用上一步得到的Messenger對象來給Service發送Message了

經過上面的五部我們就能讓client與Service進行通信。client使用Messenger對象給Service發送Message后,Service中的Handler將會對消息作出響應。

上面實現的僅僅是單向通信,即client給Service發送消息,如果我需要Service給client發送消息又該怎樣做呢?

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

6、在client中創建一個Handler對象,用于處理Service發過來的消息

7、根據client中的Handler對象創建一個client自己的Messenger對象

8、我們在第5步的時候獲得了Service的Messenger對象,并通過它來給Service發送消息。這時候,我們將client的Messenger對象賦給待發送的Message對象的replyTo字段

9、在Service的Handler處理Message時將client的Messenger解析出來,并使用client的Messenger對象給client發送消息

這樣我們就實現了client和Service的雙向通信。client和Service都有自己的Handler和Messenger對象,使得對方可以給自己發送消息,值得注意的是client的Messenger是通過Message的replyTo傳遞給Service的。

Demo鏈接:http://pan.baidu.com/share/link?shareid=583593&uk=2953765628

轉載于:https://www.cnblogs.com/Lefter/archive/2013/05/21/3091548.html

總結

以上是生活随笔為你收集整理的绑定Service的三种实现方式之使用Messenger的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。