详解Android中AIDL的使用
aidl,即android interface definition language,android接口定义语言。这门语言是为了实现进程间通信。每一个进程都有自己的一块独立的内存,都在自己的内存上存储自己的数据,执行自己的操作,每个进程之间你不知我,我不知你,而aidl,就是两个进程之间沟通的桥梁。
aidl用来做什么
aidl是android中ipc(inter-process communication)方式中的一种,aidl是android interface definition language的缩写,对于小白来说,aidl的作用是让你可以在自己的app里绑定一个其他app的service,这样你的app可以和其他app交互。
aidl文件支持的数据类型包括:
- 八种基本数据类型:byte、char、short、int、long、float、double、boolean
- string、charsequence
- 实现了parcelable接口的数据类型
- list类型。list承载的数据必须是aidl支持的类型,或者是其他声明的aidl对象
- map类型。map承载的数据必须是aidl支持的类型,或者是其他声明的aidl对象
在使用其他声明的aidl对象的时候必须要导包,即使要使用的aidl对象文件和当前正在编辑的aidl文件在同一个文件夹下。
aidl文件可以分为两类,一类用来声明实现了parcelable接口的数据类型,以供其他aidl文件使用那些非默认支持的数据类型。还有一类是用来定义接口方法,声明要暴露哪些接口给客户端调用。
aidl的具体使用步骤是:
一、创建一个服务端工程
1、如果aidl文件中涉及到实现了parcelable接口的数据类型,则先将该aidl文件定义出来。在src文件夹下右键,选择新建aidl文件,这里新建了一个book.aidl文件。
新建完以后,会在main文件下生成一个aidl的文件夹,aidl文件夹下的目录结构和java文件夹下的目录结构一样。
book.aidl文件中会有一个默认方法。
我们删除掉这个默认方法,只声明一个parcelable数据类型,这个文件就成为声明parcelable数据类型的aidl文件。注意这里的parcelable中的p是小写的。
2、这个时候我们来定义book类并实现parcelable接口,注意book类在java文件夹下的目录与book.aidl文件在aidl文件夹下的目录保持一致。
这里需要注意的一点是如果要支持为out或inout的定向tag的话,需要我们手写readfromparcel()方法。
3、然后我们开始写bookcontroller.aidl文件来定义能被客户端调用的接口。
这里需要注意的是,虽然book.aidl文件和bookcontroller.aidl文件在同一个包下,还是需要手动导入一下。
4、至此,我们的aidl文件写完了,然后我们rebuild project,系统会帮我们生成一个与aidl文件同名的java文件,这个java文件才是与我们跨进程通信密切相关的东西。
5、定义一个service,通过这个service将接口暴露给外部。
6、在清单文件中注册服务。
至此,服务端开发完成了。
二、创建一个custom工程
1、新建一个custom工程,把服务端的aidl文件夹下的内容全部拷贝到新项目中,如果aidl中有用到bean实体类,把实体类也拷贝过来,然后rebuild project。
2、在客户端的activity中连接远程服务,实现aidl通信。
完整的代码地址:
https://github.com/ruxing1102/aidl.git
到此这篇关于android中aidl的使用的文章就介绍到这了,更多相关android aidl使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!