android aidl打电话,【Android最最简单】AIDL进阶(双向通信)

前言

在上一篇文章【Android最最简单】AIDL入门中,已经向大家介绍了AIDL的基础用法,基本上AIDL常用的方式大家也就都了解了,但是,这种方式存在一种弊端或者说一种不那么人性化的地方,就是只能由客户端主动向服务端发起请求,然后由服务端处理之后向客户端返回相应的数据。日常使用,这种方式基本可以满足需求,但是有这么一种场景,这种方式就不能满足大家了。

299758305588

举个例子

服务端需要主动向客户端发送数据,而不是由客户端主动向服务端发起请求获取数据(大家可以想象一下手机上的推送),这种情况下,我们就需要使用到AIDL的进阶用法了,即一种观察者模式。

按照惯例,先上图,github地址在文末:

299758305588

效果图

如果对AIDL基本语法还有不懂的地方,请移步AIDL入门篇,接下来我们开始实现上图中的效果。

一、服务端的实现

1.创建回调的AIDL文件:

299758305588

回调的AIDL文件

2.在IRemoteService.aidl文件中实现接口的注册和反注册方法(记得要import哦,即使在相同目录结构下也是要的):

299758305588

IRemoteService

3.Build-Make module,然后修改RemoteService服务文件。我们使用RemoteCallbackList来存储注册的接口IRemoteCallback,如下:RemoteCallbackList mCallbacks;

mCallbacks = new RemoteCallbackList<>();

// 注册

mCallbacks.register(callback);

// 反注册

mCallbacks.unregister(callback);

// 服务端发起推送

int len = mCallbacks.beginBroadcast();

for (int i = 0; i < len; i++) {

try {

mCallbacks.getBroadcastItem(i).onSuccess("push", "接口回调回来的数据" + System.currentTimeMillis());

} catch (RemoteException e) {

e.printStackTrace();

}

}

mCallbacks.finishBroadcast();

完整修改请查看RemoteService类。

二、客户端的实现

客户端的修改主要是在bindService中传递的ServiceConnection对象的实现,在回调的onServiceConnected方法中,调用register方法将回调IRemoteCallback对象注册到服务端。如下:

299758305588

ServiceConnection修改

具体的改变到这里就成功了,就能够实现开篇gif的效果了,当你向服务端注册一个回调的时候,服务端就可以在有需要的时候主动调用回调返回数据给客户端了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值