AIDL使用攻略.pdfVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AIDL使用攻略

Android Interface Definition Language AIDL Raven Wang 一、简介 AIDL 全称Android Interface Definition Language 即Android 接口定义语言,被用作不 同进程间的通信,随着客户端的群组化和需求的复杂化,单一的 APK 已经无法满足客 户的需求 ,面对庞大的代码量,效率和用户体验再一次被提了出来。于是 IPC (interprocess communication 进程间通信)显的格外重要!在启动我们的APP 的时候我 们可以连带启动另外一个APP 去提供数据,去处理一些繁琐的问题,就像Android 一样, 为每一个应用分配单独的一个虚拟机,就算出现了APP 的Crash,也不会影响整个系统。 例如:音乐播放器会带来不小的内存开销,在这种情况下多多少少都会带来一些问题, 比如用户点击播放器界面之后反应慢等。如果采取Service 和 Widget 结合,通过AIDL 去传输数据的话,至少可以保证UI 的流畅,还是很有价值的。 二、AIDL 通信Server 端实现 1、创建AidlServer 这个Demo 需要演示的内容有普通参数跨进程读取、对象的跨进程读取、Bitmap 的跨 进程读取。Role 是一个 JavaBean ,里面包含了角色的各种信息和头像(Bitmap )。 DataProvider 是为外界APP 提供服务的Service 。在AndroidManifest.xml 中注册时需要 添加一个IntentFilter 以便被外界启动。 2、创建AIDL 文件 AIDL 文件的语法跟Java 的语法几乎一致,只是文件的扩展名不是.java 而是.aidl 本例主要是通过MyAidl 去向外界提供服务的。 第一行表示该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 的一个指向。 其中只有一句话,意思是指向了一个实现了parcelable 接口的Java 类。 2、实体类的实现 使用的类要实现Parcelable 接口来序列化,这是Android 提供的一个比Serializable 效率 更高的序列化接口。 基本上我们要去实现三个方法: (不知道这个内容描述是干什么用的,返回0 是没问题的) Parcel 的意思是箱子,这里可以把它理解成容器,一个存放可持久化对象的容器,我们把需 要存放的值放到容器里保管。 下面方法个定义必须为 public static final Parcelable.CreatorRole CREATOR = new CreatorRole(){}; 其中需要实现2 个方法,第一个返回一个数组,关键是第二个,他是从序列化中恢复对象的 关键,我们从容器中拿出我们想要的值,然后封装成对象,然后把对象返回。 (Imag 为 Bitmap 类型,因为 Bitmap 也是实现了 Parcelable 接口,所以可以直接调用 createFromParcel(parcel)去获取。) 整个实体类写法如下: 3、创建Service 注意:在Service 的onBind 方法中要去返回MyAidl.Stub 这也是一个IBinder 对象(先不说 为什么),在这个内部类中会出现我们在aidl 文件中声明的方法。 4 、还差一点点,编译项目。

文档评论(0)

zsmfjy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档