綁定Service的三種實現方式之使用Messenger

來源:互聯網
上載者:User

如果你需要在不同處理序間通訊,你可以在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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.