AIDL 客户端与服务端的双向通信

作者:刘某人

博客:http://blog.csdn.net/qq_26787115


时隔一年半了,终于写下了这个续篇,我发现我的很多博客有头无尾,都是有前面一点点,后面就没写去了,也正在想办法都补上


  • 初涉IPC,了解AIDL的工作原理及使用方法

http://blog.csdn.net/qq_26787115/article/details/50909672


今天聊聊的是客户端和服务端的相互通信,何谓双向通信,事实上,我们在上一篇的博客中,只是讲解了客户端请求服务端的方法,然后服务端返回一个值给我们这样,其实是最简单的用法,但是常常在我们的开发过程中,如果调用了某些方法,比如网络请求,那么就需要等待请求有结果了之后再回调给我们,这个回调的过程就是服务端向客户端通信,作为ipc通信的一种,如果你不会双向通信,那么你可以比较low的用广播,但是我还是建议你直接用一整套的AIDL复用,好的,那么问题来了,我们怎么下手呢?


服务端

我们新建两个工程,一个叫ADILClient,一个叫AIDLService,分别代表的是客户端和服务端

我们现在开始编写我们的aidl,这里我需要编写两个AIDL文件,一个是我们对外的方法,一个是我们对外的回调方法,如图

这里我做一下讲解,首先我new了一个aidl的文件夹,在main下,和java同级,然后定义了一个公共的包名:com.android.openimpl,最后在里面实现了两个aidl文件,我们来看下具体的文件内容


IMyLifeStyleInterface


IMyLifeStyleListener

这里我定义了IMyLifeStyleInterface ,里面有两个方法,假设我定义的事一个人,他有基本的两个本能,一个是计算,我传两个数字给他,他进行一系列的处理,那么,问题来, 我不想用返回值,我想通过回调知道,这是一点,另一个是睡觉,而在IMyLifeStyleListener,我也定义了两个对应的回调OnCallBackSleep和OnCallBackSize,好了,现在开始来实现我们的远程Service服务

这里,我定义了一个远程的服务OpenImplService,里面我只是new了IMyLifeStyleInterface.Stub并且把Binder对象给了onBind方法,而在Binder内部,我做的操作相信大家都看的明白吧,很简单,Ok,那我们的服务端就已经搞定了,我们来看下服务端的整体结构

当然,别忘了在清单文件中注册


客户端

好的,现在就开始来实现我们的客户端,客户端也需要同样的AIDL文件,所以我可以直接复制过去,但是要注意的是包名一定要相同,如图

这里,我的客户端就是app包下的东西,那么我们来实现UI上的逻辑

这里,我定义了两个输入框和有个按钮,对应的计算和睡觉,好的,我们run一下

我们来开始实现具体的逻辑了,这也是我们客户端经常要干的事情首先,我们initService来初始化了服务,在android5.0之后绑定远程服务都需要完整的包名了,如下

这里需要传一个mConnection,这是一个对应的关系,如果现在bind,你销毁的时候需要unBind

好的,我们具体来看下mConnection的内容吧

他一共会重写两个方法,服务绑定onServiceConnected和服务解绑onServiceDisconnected,所以这里我们用了一个标志位isBind来标记绑定状态,然后通过AIDL的asInterface方法来实例化对应的AIDL对象,然后就是注册这个接口回调了

这里要注意的事需要继承的是AIDL的Stub,最后就是我们的点击事件了

这里算是比较简单的了,传值调用即可,好的,下面贴上全部的代码

可以发现,代码很是简洁,希望大家能够学会,最后我们运行一遍

这里可以看到,点击睡觉,服务端会叫我们关下灯,而计算的话,我传的是2和3,服务端计算了一下 2 * 2 + 3 = 7 并且返回回来了。


Demo下载:

http://download.csdn.net/download/qq_26787115/10126829


一命二运三风水,四修阴德五读书!

刘桂林

微信号 : Android_LiuGuiLin

新浪微博:@刘某人程序员



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值