绑定Service 三种使用方式 之 利用Messenger实现进程双向通信

 

思路:

   (以下 提供服务端简称服务端,访问服务端简称客户端)

    1. 服务进程和客户端进程之间的通信传递的Message,所以服务端要有Handler对象来处理收到的Message对象。

     2. 客户端给服务端发送Message对象利用的Messenger对象是从服务端传过来的。同理,若服务端给客户端发送Message,使用的Messenger是从客户端传递       过来的。即,响应消息的一端要提供Messenger信使对象给对方端

     3.客户端先给服务端发送消息,服务端才能给客户端发信息作为回应。

     4.注:若实现双向通信,服务端和客户端要都具备Handler对象和Messenger对象,Handler对象处理消息,Messenger发送消息。

   

    本文通过隐式Intent来绑定服务,需要设置Intent的action值,该值要与服务端配置文件中Intent-filter中设置的action属性对应。    需要在配置文件中注册服务,并设定exported属性为true,该属性的默认值是true.false表示外部进程无法访问该服务。

   

 

 实现步骤:

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

 

转载于:https://www.cnblogs.com/d-on/p/4045544.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android中,Service服务可以通过启动方式方式实现使用启动方式启动Service时,Service会在后台长时间运行,执行任务并进行通信,而使用方式启动Service时,它会与调用者之间建立起一种关联,调用者可以通过该关联与Service进行交互。 以下是使用方式使用启动方式实现Service服务的区别: 1. 生命周期不同 使用启动方式启动Service时,Service在调用startService()方法后会一直运行,直到调用stopService()方法或Service自行结束才会停止。而使用方式启动Service时,Service与调用者之间建立的连接在调用者退出时会自动断开,Service会在所有连接都断开后自行停止。 2. 通信方式不同 使用启动方式启动Service时,Service与调用者之间的通信通常是单向的,即Service向调用者发送数据或通知。而使用方式启动Service时,调用者可以通过建立与Service的连接,实现双向通信,即Service和调用者都可以向对方发送数据或通知。 3. 提供的功能不同 使用启动方式启动Service时,Service通常会执行某项任务,例如下载文件或播放音乐等,而使用方式启动Service时,Service通常会提供某些功能,例如数据查询或计算等,调用者可以通过与Service建立连接,调用其提供的方法进行交互。 总之,使用启动方式启动Service适合长时间运行的任务,而使用方式启动Service适合提供某些功能的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值