AIDL使用跨进程调用全实现

写了不下五次了,这次全记录!

AIDL使用起来其实很简单,一个服务端,一个客户端。
服务端顾名思义,就是提供服务的。客户端通过绑定service获取连接,获取到binder对象应用之后,可以用来调用服务端实现的一些方法。
而AIDL文件相当于两者的协议书,服务端和客户端必须都有,才能支持客户端访问服务端。

如下整体思路就是(如果看不懂可以直接跳过看后面的实操过程):

  1. 新建服务端项目
  2. 服务端新建AIDL文件
  3. 然后在AIDL文件中新增一些自定义方法
  4. 运行项目或者make project,目的是编译生成与.aidl文件对应的.java文件
  5. 在服务中继承AIDL的Stub类,实现其对应方法(自定义和默认方法)
  6. 然后在服务类的onBind方法中,创建此实现类的对象传递给绑定发起者,也就是客户端
  7. 新建客户端项目
  8. 将服务端main目录下的AIDL文件夹拷贝到客户端的main目录下
  9. 运行项目或者make project,目的是编译生成与.aidl文件对应的.java文件
  10. 客户单发起服务绑定,跨进程连接服务端的服务。绑定服务时,传入的ServiceConnection会有回调onServiceConnected(),在此方法中会将服务端的IBinder对象传过来,然后我们可以使用此对象调用服务端的实现方法

下面开始实际操作:
新建一个安卓项目,然后在main目录下新建AIDL文件:
在这里插入图片描述
建成后的效果如下:
在这里插入图片描述
然后打开IMyAidlInterface.aidl,如下:
在这里插入图片描述
新增自己的方法:
在这里插入图片描述
好了,AIDL文件创建完毕,注意,getName就是我们自定义的方法,或者可以说是提供给客户端调用的方法。
接下来执行make project,目的是编译生成与AIDL文件对应的java文件:
在这里插入图片描述
有时间的话重点关注其如下实现:
在这里插入图片描述
此处是向远程服务发起调用并返回结果。在客户端调用mRemote.transact之后,对端(服务端)会调用onTransact。具体的代码逻辑不再具体解析。
继续流程。
此处与aidl文件对应的java文件生成后,在android project中新建服务类,在类中继承IMyAidlInterface.Stub。如下:
在这里插入图片描述
大概意思就是,客户端绑定服务,并获取远程binder对象引用,然后就可以调用远程方法。
注意要对相关的重写方法进行实现。
并且,四大组件都要在AndroidManifest.xml中进行注册,别忘了注册MyService并且将exported设置为true。

服务端完成,我们接下来完成客户端。
新建项目后,将“协议文件”拷贝过来。
在这里插入图片描述
执行make project或者运行项目,同样会生成如下文件:
在这里插入图片描述
这样的话,客户端和服务端都有了一份aidl文件,并且对应的java文件已经生成。
接下来,我们在客户端尝试连接服务端,获取binder对象:
在这里插入图片描述
细节上可能有问题,大家如果有发现问题,还请提出来。多谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值