AIDL 随笔

aidl 全称的意思是 应用接口定义语言,听起来是完全不认识的语言,但实际上写起来和java语言定义接口interface的语法差不多,作用就是用来定义接口,但是这个接口的特点是专门用来给远程的应用调用的(按照我目前的理解),这里的远程指的是不同的进程,其中一个进程作为服务端来提供这个aidl接口,当然接口里面有接口的方法,来给另一个进程中的客户端来访问,简单来说aidl的作用就是实现了跨进程的方法调用。

其次呢,我们讲到回调的时候也会用到接口来实现,既然可以跨进程的接口调用,那么跨进程的回调也当然是可以的,实现起来的步骤也不困难,但是还是有几个重点要注意。

假如现在就来实现两个进程的通信(通常来说两个进程就是对应着两个应用,但是有的应用因为某些原因会以多进程的模式运行,这两者没有本质区别),那么大体上有三个步骤:

1、在服务端创建aidl接口(.aidl文件),在服务Service中实现这个接口对应的Binder,然后将Binder在onBind方法中返回,这个Binder主要是面向远程的进程的,实际上如果本进程的其他组件也来访问这个服务,则不需要将这个Binder返回,而是另外创建一个Binder返回。这里要注意的是aidl文件内不能有中文注释以及名字不能太长。因为这里的服务Service是在别的应用,好像是不可以显式调用服务的(?,所以我这里是给服务添加了一个意图过滤,指定一下action和category(category必须指定,至少有一个default),然后远程客户端就可以通过intent隐式绑定我们的服务了

2、将生成的整个aidl包复制到客户端应用的main目录下

3、绑定服务,这时候需要实现ServiceConnection接口,在onServiceConnected方法中可以拿到IBinder对象,然后通过IxxxxxManager.Stub.asInterface()传入IBinder就可以拿到aidl接口的实现类,接下来只要根据需求调用这个接口的方法就可以了,另外要注意的是,接口调用的方法是运行在服务端的线程池中并且已经实现了同步,并且可能耗时,所以应该在子线程中调用接口的方法

以上就是aidl的简单用法

至于回调的话,回调也是一个aidl接口,同样创建一个aidl文件,然后在客户端调用上面接口的方法中需要传入这个接口类型的参数,再由客户端进行实现回调就可以了

虽然步骤看起来并不复杂,但是aidl的机制据说是很复杂的,我觉得要想学习它之前先用起来再说吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值