編輯:關於Android編程
如果你需要在不同進程間通信,你可以在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的。
騰訊Wifi管家app這是騰訊旗下的一款類似Wifi萬能鑰匙。一款騰訊WiFi管家在手,讓你一鍵連接WiFi,很多朋友都在問騰訊WiFi管家怎麼破解密碼?快
Android一直沒有提供類似於ios中自帶清除效果的輸入框(ios只要只要添加屬性即可實現),所以在Android當中 想要實現此效果就需要使用自定義控件
Motion SensorsAndroid平台提供了多種感應器,讓你監控設備的運動。這些傳感器的兩個總是基於硬件的(加速度計和陀螺儀),並且可以要麼基於硬件或基於軟件的這
我們在使用ListView的時候,很多情況下需要用到下拉刷新的功能。為了了解下拉刷新的底層實現原理,我采用自定義ListView控件的方式來實現效果。實現的基本原理是:自