博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android IPC之AIDL
阅读量:6682 次
发布时间:2019-06-25

本文共 1074 字,大约阅读时间需要 3 分钟。

首先说一下Android进程间的集中通信方式

1.使用Bundle   ----> 用于android四大组件间的进程间通信
2.使用文件共享  ---->用于单线程读写

3.使用Messenger   ---->用于可存放在message中的数据的传递

4.AIDL android 接口定义语言  ---->主要用于调用远程服务的方法的情况 还可以注册接口 

 

 

本文大致说一下第四种方式 AIDL,废话不多说了,直接上代码

先看一下host的目录结构:

IMyAidlInterface.aidl 是默认新建的AIDL文件,之后我会在里面增加部分代码,新建AIDL文件方法如下(切记,新建aidl文件后记得make project一下,as会给我们默认生成很多aidl对应的java代码!):

 

我们打开IMyAidlInterface

我们就以上代码稍作简介:

1.basciTypes 是创建aidl默认的生成的代码, 展示给我们一些默认支持的数据类型

2.getName() 返回一个默认支持类型 String,不需要做额外处理

3.getPerson() 自定义返回类型

如果我们返回一个基础类型,不需要做额外的处理,创建目录结构中的 MyService, 重构其中的方法,getName直接返回一个简单的String

最后在mainfest 添加service的相关配置:

 

然后我们新建 client项目,我们将 host中的aidl文件夹原封不动复制到client ,复制完成client 目录结构如下:

 

client中直接bind host中的service就可以调用方法了,下面是 client中的代码:

 

 点击按钮查看效果,成功:

 

 使用自定义数据类型,必须继承 Parcelable,我们返回host中查看代码:

1.新建class Person:

 新建Person.aidl

这样我们就可以在 IMyAidlInterface新建方法getperson访问该自定义数据结构了(Person 必须手动导入,as不会帮我们自动导入):

如果想把 gedPerson方法单独写在另一个结构里,我们可以新建一个aidl, IPerson:

 

 最后注意一点坑,我们必须在host以及client(demo3)的gradle中加入一下配置,否则在AIDL中导入自定义Person的时候会报错,找不到Person:

 

项目地址:  ,在里面找AIDL.ZIP

转载于:https://www.cnblogs.com/no-coding/p/7382171.html

你可能感兴趣的文章
js获取链接地址
查看>>
Android自动化问题小结
查看>>
Linux/Uninx下Tcpdump命令详解
查看>>
mac 使用“终端”远程登录 linux 主机
查看>>
avhttp终于支持了gzip/chunked
查看>>
《设计模式 系列》- 创建型模式 - 状态模式
查看>>
WebService之Axis2快速入门(4): 传输二进制文件
查看>>
subversion中去除不需要的目录
查看>>
Android内核开发:从源码树中删除出厂的app应用
查看>>
Node.js+Express商业开发中的安全性考虑
查看>>
Python 学习笔记 - 上下文
查看>>
linux技术手册
查看>>
jquery的验证formValidator
查看>>
poj 其他
查看>>
UNIX epoch -- 为什么UNIX的时间起始于1970.01.01
查看>>
推荐10个HTML5游戏网站
查看>>
ios中的动画
查看>>
在pcDuino实现AP–wifi热点共享
查看>>
mysql实时记录客户端提交的sql语句
查看>>
多线程学习笔记(五)
查看>>