AIDL进程间通信

前言

这两天自己简单写了一下AIDL,发现被一个小问题搞了很久,后面发现原来是Android5.0以上的系统的一些原因,所以记录一下,方便以后注意。

AIDL简单介绍

一种Android内部进程通信接口的描述语言,可以定义进程间的通信接口。

简单使用

使用步骤

1、在Android studio 项目创建两个module。一个为服务端(aidlservice),一个为客户端(aidlclient)。

2、先进行aidlservice的实现。

  • 先创建aidl文件,定义接口,并编写相关实现方法

这里写图片描述

这里写图片描述

  • 在Build-Rebuild Project 中进行编译项目,会自动生成aidl文件。

这里写图片描述

  • 新建一个Service类,将aidl接口的具体实现写在Stub中,在onBind()方法中返回。

    这里写图片描述

  • 记得在Manifest文件中注册Service。

这里写图片描述

到这里已经基本上实现 aidlservice 的工作。

3、拷贝一份 aidlservice 中的aidl文件到 aidlclient 中。注意整个包拷贝过去。编译项目也会自动生成aidl文件。

这里写图片描述

4、aidlclient 的实现。

  • 绑定服务,设置action要和注册的service声明的action保持一致。

    这里写图片描述

  • 在 bindService(intent,conn, Context.BIND_AUTO_CREATE); conn为ServiceConnection接口,在其重写的onServiceConnected()方法中调用Stub.asInterface()方法。

    这里写图片描述

到这里,aidlclient 也完成了。看下运行结果。(先运行服务端,再运行客户端。)
在5.0系统以下的手机运行能够正常出结果。

这里写图片描述

这里写图片描述

换成5.0系统以上的手机之后就会报错:

这里写图片描述

报错原因大致就是说:需要显式的去启动service。

解决方法:
在bindService的时候intent.setPackage();

这里写图片描述

重新运行,就能正常出结果了。

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值