Messenger方式实现进程间通讯

简介

进程间通讯相信大家的比较熟悉,而广为人知的通讯有两种,一种就是通过AIDL文件编写通讯接口,另一种就是今天我要说的Messenger。其实Messenger就是基于AIDL实现的,不懂的自行百度。

作用

当一个app的功能越来越多,越来越复杂,那么是不是需要更多资源和时间去处理呢?那是肯定的,但一个进程能获得的资源是有限的,而且这个进程既要负责ui绘制又要进行复杂运算,想想就知道继续这样下去你的app只会越来越卡,只显然不符合用户的期望。所以多进程概念应运而生,将ui绘制和逻辑运算放到不同进程里进行,那么影响ui卡顿的问题就只有控件的性能这个因素了。而且逻辑运算报错导致崩溃不再影响ui,ui正常使用,提高应用整体稳定性。

实现

开启一个远程Services充当本地服务器,用于处理客户端发送的计算请求(这里的客户端指代ui)。Services的配置如下图所示,使用process属性定义其为一个远程服务。

Activity与Services交互方式就两种,stratSerices和bindServices,这里我采用的是bindServices方式,传入的上下文为Application,这样使得这个服务的生命周期与app一致。

具体的连接逻辑如下图所示:

connect()方法就是调用bindServices方法和开启一个线程经行轮询(检查当前是否有客户端请求),这里还包含了一个重连机制,防止远程服务器崩溃后app无法继续请求数据。

客户端与服务器连接上了之后就可以开始通讯,通讯需要什么?需要协议,通过协议来识别客户端的请求,协议的实现如下所示:

这里我只写了一个协议用于测试,后续新增只需在这里定义协议号和对应的协议处理器即可。getResult方法由服务器调用,运算对应协议的计算代码。handleResult方法由客户端调用,使用返回的数据更新界面。

具体协议定义如下:

首先是协议号,然后就是各种参数,使用Bundle来传输

demo已上传到Github,大家自行查看点击这里

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值