- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AIDL讲解
通信机制的核心——IBinder 在Linux的概念空间中,Android的每个Activity都是一个独立的进程,每个Service也都是一个独立的进程,Activity,Service之间要交换数据属于IPC。IBinder就是为了Activity Service通讯而设计的一个轻量级的IPC框架。IBinder传递的数据被封装到android.os.parcel(注意parcel并非通用的序列化机制,而是专为IBinder设计的)客户端通过IBinder发送请求给服务端,服务端提供实际服务。 示例简介 这个示例用两个Demo来说明AIDL的创建和应用,分别为:服务端实现(AidlServer)、客户端实现(AidlClient)。 要实现的效果:服务端(AidlServer)包含角色信息并开启了一个service,客户端(AidlClient)从服务端获取信息(图片、文字)。 AIDL通信Server端实现 AIDL通信Server端实现 需要演示的内容有普通参数跨进程读取、对象的跨进程读取、Bitmap的跨进程读取。Role是一个JavaBean,里面包含了角色的各种信息和头像(Bitmap)。DataProvider是为外界APP提供服务的。AndroidManifest.xml中注册时需要添加一个IntentFilter以便被外界启动。 AIDL通信Server端实现 AIDL通信Server端实现 AIDL通信Server端实现 AIDL文件的语法跟Java的语法几乎一致,只是文件的扩展名不是.java而是.aidl本例主要是通过MyAidl去向外界提供服务的。 AIDL通信Server端实现 第一行表示该aidl文件所在的包名。先看主方法,里面定义了3个方法,分别为getRoleList() 、getRole(String name)、getName()。返回值分别为List、Role、String。(需要特别注意,不是基本数据类型,需要有方向指示,包括in、out和inout,in表示由客户端设置,out表示由服务端设置,inout是两者均可设置)每个Aidl文件中只能定义一个Interface。其中Role是我们自定义的实体类,Aidl并不能找到这个类,所以需要倒包,但是这个包是Role.java和Role.aidl所在的包。Role.aidl是对Role.java的一个指向。 Role.aidl中只有一句话,意思是指向了一个实现了parcelable接口的Java类。 AIDL通信Server端实现 AIDL通信Server端实现 Role类是一个序列化的类,这里使用Parcelable 接口来序列化,他是Google 提供的一个比Serializable 效率更高的序列化类。(什么是序列化? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给我们提供了一种较好的保存对象状态的机制,那就是序列化。) 实现序列化,我们要实现三个方法: 1、describeContents() 没搞懂有什么用,反正直接返回0也可以 2、writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中. 3、静态的Parcelable.Creator接口,本接口有两个方法: 一为createFromParcel(Parcel source) 实现从source中创建出类的实例的功能。另一个为newArray(int size) 创建一个类型为T,长度为 size的数组,仅一句话(return new Role[size]即可,估计本方法是供外部类反序列化本类数组使用。 AIDL通信Server端实现 DataProvider是Service的子类,DataProvider类中定义了一个内嵌类(AidlImpl),该类是MyAidl.Stub的子类 。? MyAidl.Stub是根据MyAidl.aidl文件自动生成的,一般并不需要管这个类的内容,只需要编写一个继承于MyAidl.Stub类的子类(即AidlImpl)即可。onBind方法必须返回AidlImpl类的对象实例,否则客户端无法获得服务对象。 AIDL通信Client端实现 AIDL通信Client端实现 首先,把Server的gen下面com.raven.domain包完全copy过来,因为上面用到了Role这个实体类,也需要把Role类拷过来。 AIDL通信Client端实现 AIDL通信Client端实现 AIDL通信Client端实现 接下来,被实例化之后的mService就可以用来获取远
您可能关注的文档
- 学生会检查工作细则.doc
- 通信原理复习提纲10.6.doc
- 大学毕业设计乌河中桥设计.doc
- 春天的畅想说课.doc
- 果树配方施肥技术.doc
- 二年级下册语文1-4单元综合测试.doc
- 四年级数学第十周周末作业.doc
- POS机问题解决策略.ppt
- 学习情景5油品采集与处理复习题.doc
- 敏捷制造工程.ppt
- 第十一章 电流和电路专题特训二 实物图与电路图的互画 教学设计 2024-2025学年鲁科版物理九年级上册.docx
- 人教版七年级上册信息技术6.3加工音频素材 教学设计.docx
- 5.1自然地理环境的整体性 说课教案 (1).docx
- 4.1 夯实法治基础 教学设计-2023-2024学年统编版九年级道德与法治上册.docx
- 3.1 光的色彩 颜色 电子教案 2023-2024学年苏科版为了八年级上学期.docx
- 小学体育与健康 四年级下册健康教育 教案.docx
- 2024-2025学年初中数学九年级下册北京课改版(2024)教学设计合集.docx
- 2024-2025学年初中科学七年级下册浙教版(2024)教学设计合集.docx
- 2024-2025学年小学信息技术(信息科技)六年级下册浙摄影版(2013)教学设计合集.docx
- 2024-2025学年小学美术二年级下册人美版(常锐伦、欧京海)教学设计合集.docx
最近下载
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf
- 造血干细胞移植的护理干预.pptx
- 布料车岗位安全规程.pptx
- YDT 5178-2017 通信管道人孔和手孔图集.docx VIP
- 精品解析:【区级联考】上海徐汇区2019届九年级学习能力诊断(二模)数学试题(解析版).pdf VIP
- 精品解析:广东省佛山市南海区,三水区2022-2023学年九年级上学期数学期末考试(原卷版).pdf VIP
- 一种护筒导向架结构.pdf VIP
- 老旧小区雨污分流改造要点与难点分析.docx VIP
- 鞍钢宪法及后福特主义.pdf
- 精品解析:广东省广州市2022-2023学年九年级上学期期末数学考前模拟试题(三)(解析版).pdf VIP
文档评论(0)