aidl 基础用法

什么是aidl

aidl英文全称是Android Interface Definition Language,即Android接口定义语言,AIDL与其他IDL语言类似, 它允许你定义客户端与服务端达成一致的程序接口使用进程间通信相互交流。 在Android上面,一个进程不能正常的访问另一个进程的内存。 所以说,他们需要分解他们的对象为操作系统可以理解的基本单位,然后为你把这些对象按次序跨越进程边界 书写这些代码是单调冗长的,所以android使用AIDL为咱们处理这个问题。

注意:使用AIDL只有在你允许来自不同应用的客户端跨进程通信访问你的service,并且想要在你的service种处理多线程的时候才是必要的。 如果你不需要执行不同应用之间的IPC并发,你应该通过实现Binder建立你的接口,或者如果你想执行IPC,但是不需要处理多线程。那么使用Messenger实现你的接口

aidl所支持的类型

默认支持的数据类型包括: 

Java中的八种基本数据类型,包括 byte,int,long,float,double,boolean,char (不支持short类型)

String 类型。

CharSequence类型。

List类型:List中的所有元素必须是AIDL支持的类型之一,或者是一个其他AIDL生成的接口,或者是定义的parcelable(下文关于这个会有详解)。List可以使用泛型。

Map类型:Map中的所有元素必须是AIDL支持的类型之一,或者是一个其他AIDL生成的接口,或者是定义的parcelable。Map是不支持泛型的

aidl的使用

1,传递基本类型的使用

模拟一种场景,就是在客户端输入两个数,在服务端计算客户端输入的两个数的和然后返回给客户端,客户端用来显示两个数的和

(1)首先在服务端 创建aidl文件,具体步骤如下,如下图所示

aidl包创建步骤

点击AIDL Folder  输入aidl,ok即可

(2)在aidl包下创建aidl文件,步骤如下图所示

在aidl包下创建aidl文件

(3)在aidl文件中写入需要的接口方法并且编译

如果结果如下图所示,则代表编译成功

(4)在服务端写一个service将aidl接口暴露出去

至此服务端的事已经干完了

(5)在客户端中将服务端中的aidl文件复制一份,一定要注意的是包括包名必须要与服务端保持一致,不然会报以下错误 java.lang.SecurityException: Binder invocation to an incorrect interface

(6)当客户端启动的时候通过绑定Service的形式与服务端建立连接

(7)当客户端与服务端绑定之后需要在客户端拿到定义的接口的代理类的对象,然后用代理类的对象调用在aidl文件中定义的方法,返回计算结果并且显示

2,传递自定义类型的使用 

模拟一种情景,就是在客户端点击按钮一次,将自定义的一个类型的数据传递到服务端,服务端收到数据之后,将其加入到集合中并且返回

(1)(2)步骤与基本类型相同,不再进行重复

(3)在服务端创建一个Person类,并且实现Parcelable接口,并且手动在该类中定义一个名称叫做CREATOR的变量,必须注意的是名字必须叫这个,并且依次读取在writeToParcel中写入的数据,如下所示

在aidl文件中加入 如下方法 ,并且手动在aidl文件中导入Person的包,比如:import com.example.aidlserver.bean.Person;  

编译服务端,会发现报如下错误

这是因为这样写编译器是不认识Person的,必须接入一个aidl文件去描述Person,要注意的是此aidl文件必须要与Person类的包名保持一致,如下所示

至此服务端的工作就做完了

(4)将刚才在服务端写入的aidl文件和Person类拷贝一份到客户端,注意包名保持一致

(5)在客户端调用服务端,步骤与基本类型一致,不再赘述了,运行结果如下所示

源码地址:https://github.com/zhanmusi2323/AidlClient

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容