可参考文章:
http://blog.csdn.net/mapdigit/article/details/7706935
我的补充:
Service端:1 创建Handler处理client的请求——client的注册、注销、设置一个值
(1)创建一个Messenger类型的队列mClients,一个service可以对应多个客户端。
(2)每个mClients用于给对应的客户端发送消息
(3)mClients变量保存的是msg.replyTo,也就是客户端的用于接收信息的Messenger(下面Client端的3)。向客户端发送消息时,就使用这个mClient保存的 Messenger。
2 使用上面1的Handler创建Messenger,用于接收Client发送的消息,这些消息由1中的Handler处理
3 创建IBinder,讲IBinder返回给客户端
Client端: 1 使用Service端的3创建的IBinder创建Messenger,用于发送消息
2 创建Handler处理Service的请求——设置一个值
3 使用上面2的Handler创建Messenger,用于接收Service发送的消息
点击Bind按钮,步骤如下:
Client :进入onCreat函数,做bindService()函数来bind一个service
Service:onCreate
onBind,返回mMessenger.getBinder(),上面Service端的3. 可以输出这个IBinder的id号
Client:service和client连接上了,进入onServiceConnect()函数,得到一个service传过来的IBinder号,可以输出,发现和上一步的id号是一样的。
在onServiceConnect中,使用service传过来的IBinder号创建一个Messenger,上面Client端的1,发送两个消息:注册和设置一个值,可以输出这个设置的值
Server:接收到发送来的两个消息。处理第二个消息时,再把接收到的值发送回去
Client:接收到发送来的消息。可以输出接收到的值,和设置并发送过去的值是一样的。
点击unBind按钮:
Client:doUnbindService函数中,给service发送注销的消息
Service:接收到消息,从队列中将这个client删除
service:进入onDestroy函数
点击返回键退出:
service:进入onDestroy函数