(以下 提供服务端简称服务端,访问服务端简称客户端)
1. 服务进程和客户端进程之间的通信传递的Message,所以服务端要有Handler对象来处理收到的Message对象。
2. 客户端给服务端发送Message对象利用的Messenger对象是从服务端传过来的。同理,若服务端给客户端发送Message,使用的Messenger是从客户端传递 过来的。即,响应消息的一端要提供Messenger信使对象给对方端
3.客户端先给服务端发送消息,服务端才能给客户端发信息作为回应。
4.注:若实现双向通信,服务端和客户端要都具备Handler对象和Messenger对象,Handler对象处理消息,Messenger发送消息。
实现步骤:
1.创建Service进程,在Service中创建Handler对象,用于处理客户端发送的Message;利用该Handler对象创建Messenger对象,用于客户端给服务端发消息。
2,在onBind()方法中利用上步创建的Messenger对象创建IBinder接口对象,并作为onBind()方法的放回值传给客户端
3.在配置文件中注册服务,同时要注册一个过滤器。
4.创建客户端进程,在客户端创建实现ServiceConnection接口的子类,实现该接口的两个方法,在onServiceConnected(ComponentName arg0, IBinder arg1) {}方法中,利用服务端传过来的IBinder接口对象参数创建Messager对象,用来客户端发消息。
至此,实现了客户端向服务端发送Message的单向通信。
5,如需要双向通信,在client端创建自己的Handler对象,利用该对象再创建client的Messenger对象。
6. client端send Message的时候,将上步创建的Messenger对象赋给Message的replyTo字段;
7. Service端处理消息的时候,获得封装在message中的client端Messenger,利用该Messenger对象,服务端就可以给客服端发message