读书人

service bound(2)

发布时间: 2013-04-09 16:45:09 作者: rapoo

service bound(二)

service bound(二)

service 绑定有三种实现方式:

1. 直接继承Binder类实现。

条件: 同一应用,同一进程

2. 使用Messenger实现。

条件:要在不同的进程间通信,这种方式不用考虑线程安全性。(单线程操作时使用)

3. 使用AIDL实现。

条件:要在不同的进程间通信,并且需要多线程处理。要考虑线程之间的安全性。


通过Messenger实现bound service。

实现步骤:

service 要实现Handler,service通过Handler可以得到客户端的调用请求。
Handler用于创建Messenger对象。
Messenger创建一个IBinder,client调用onBind()时,IBinder返回给client的
Clients 通过IBinder实例化Messenger
service 通过Handler收到每一个Message, 在 handleMessage() 方法明确的处理.

---service 要实现Handler,service通过Handler可以得到客户端的调用请求。

class MessengerHandler extends Handler{@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case REGISTER:if(msg.replyTo != null && !messengerList.contains(msg.replyTo)){messengerList.add(msg.replyTo) ;}Toast.makeText(getApplicationContext(), "bound", Toast.LENGTH_SHORT).show();break;case UNREGISTER:if(msg.replyTo != null && messengerList.contains(msg.replyTo)){messengerList.remove(msg.replyTo) ;}Toast.makeText(getApplicationContext(), "unbound", Toast.LENGTH_SHORT).show();break;case REPLYTO:Message message = Message.obtain(null, 1, 0, 0);Bundle data = new Bundle() ;data.putString("REPLYTO", "reply from service") ;message.setData(data) ;try {msg.replyTo.send(message) ;} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}default:super.handleMessage(msg);break;}}}



---Handler用于创建Messenger对象。

<activity android:name=".messenger.MessengerActivity">          <intent-filter>           <action android:name="com.hualu.serviceexample.BIND_MESSENGER_ACTIVITY"></action>           <category android:name="android.intent.category.DEFAULT"></category>       </intent-filter>        </activity>         <service android:name=".messenger.MessengerService">            <intent-filter>                <action android:name="com.hualu.serviceexample.BIND_MESSENGER_SERVICE"></action>            </intent-filter>        </service>


读书人网 >移动开发

热点推荐