概述
最新手里的项目接近尾声,感觉自己关于android的东西有些混乱,因此想通过这段时间从头在梳理下android知识。也希望可以把在梳理过程中的一些跟大家分享,一起进步。
那么今天要说的就是跨进程远程服务-AIDL。实际开发中可能用到的比较少。
在Android中通常使用AIDL来定义向客户端公开的接口,通俗的理解为,应用通过AIDL向其他应用提供接口。完成两个应用之间的交互。
构建远程服务的步骤:
1)编写一个AIDL文件来定义接口。AIDL文件使用java语法并拥有扩展名.aidl。AIDL文件内部使用的包名与Android项目使用的包名一致。
2)将AIDL文件放在src目录下
3)实现一个服务通过onBind()方法返回AIDL文件生成的接口。
4)配置服务在清单文件。
这样作为向外提供接口的server端就完成了。一般情况下,当你写完aidl文件,编译过后如果aidl文件没有语法问题会在应用的gen目录下生成aidl的Java文件。
AIDL的服务接口定义
AIDL 语法简单,用来声明接口,其中的方法接收参数和返回值,但是参数和返回值的类型是有约束的,且有些类型是需要 import,另外一些则无需这样做。
AIDL 支持的数据类型划分为四类,第一类是 Java 编程语言中的基本类型,第二类包括 String、List、Map 和 CharSequence,第三类是其他 AIDL 生成的 interface,第四类是实现了 Parcelable protocol 的自定义类。
其中,除了第一类外,其他三类在使用时均需要特别小心。
使用第二类时,首先需要明白这些类不需要 import,是内嵌的。其次注意在使用 List 和 Map 此二者容器类时,需注意其元素必须得是 AIDL 支持的数据类型,List 可支持泛型,但是 Map 不支持,同时另外一端负责接收的具体的类里则必须是 ArrayList 和 HashMap。
使用第三、四类时,需要留意它们都是需要 import 的,但是前者传递时,传递的是 reference,而后者则是 value。
在创建 .aidl 文件的过程中,应该注意一旦 method 有参数,则需注意在前面加上 in, out 或 inout,它们被称为 directional tag,但是对于基本类型的参数,默认就是 in,并且不会是其他值。
然后在activity中实现serviceConnect获取aidl返回的binder对象。进行通信。
这样就完成了 两个应用同dial进行交互数据访问了。
下面在说下aidl如何传递复杂数据实现Parcelable。
aidl传递Parcelable时,需要在改实体所在目录下写一个该实体的aidl文件。
ok,到这已经将aidl介绍完了。欢迎大家一起讨论。
最后
以上就是悦耳茉莉为你收集整理的android跨进程通知-远程服务Aidl的全部内容,希望文章能够帮你解决android跨进程通知-远程服务Aidl所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复