基于AIDL进程间通信技术研究与分析
摘要:进程间通信是操作系统中非常重要基础功能,实现进程通信有多种技术,比如管道通信流,IPC机制等,本文针对Android平台中进程通信技术AIDL进行较为深入的分析探讨,并给出实例加以论述。
关键词:Android;AIDL;进程通讯
操作系统中,多个进程间进行通讯、共享资源实现系统功能平台,是非常基础和重要的功能应用;同时,进程通讯也是操作系统内核的重要功能部分。Linux操纵系统中,进程通讯一般使用传统的IPC(Inter-ProcessCommunication,IPC)模式,且IPC模式实现了共享内存、管道、消息队列和socket等等,虽然IPC模式广泛使用,但IPC模式中UID/PID数据是由应用程序填入,存在着可靠性差,容易被篡改,难于维护等问题。
AIDL(AndroidInterfaceDefinitionLanguage)是Android系统自定义的接口描述语言,是Android平台中实现进程间通讯方式一种,属轻量级通讯机制,有着实现简单、效率较高等优点。
1AIDL实现原理及过程
AIDL语言属于系统级原语,但语法结构和Java语言非常相似,AIDL中主要用于定义访问接口,无实现过程。与Java不同的是,AIDL允许定义函数参数传递的方向,AIDL中支持三种方向:in,out,inout。
标识为in的参数将从调用者传递到远程服务中;
标识为out的参数将从远程服务传递到调用者中;
标识为inout的参数将先从调用者传递到远程服务中,再从远程服务返回给调用者。
ADIL实现过程一般按以下步骤:(1)创建AIDL接口描述文件;(2)通过继承android.os.Iinterface接口实现远程服务AIDL接口的Java接口;(3)绑定和使用远程服务;(4)客户端调用。
AIDL通讯案例中,服务端一般由一个AIDL文件和一个IService实现接口及Service实现类组成,其中IService接口用于实现AIDL所定义的访问方法,且IService必须是android.os.Iinterface子接口,Service实现类则是AIDL接口具体的实现类。
1)定义如下AIDL文件如下:
interfaceIService{
intgetAccountBalance();
intgetCustomerList(inStringbranch,outString[]customerList);
}
2)Iservice接口的实现
在实现AIDL接口的Service接口其内部结构由三部分组成,1)内部静态抽象类Stub,Stub类及其子类在整个AIDL通讯中非常重要,是用于实现AIDL接口的实现类,Stub必须是Android.os.Binder的子类及IService的实现类。2)内部静态类Proxy,Proxy类属于是向远程服务提供调用接口类。3)是IService中实现的AIDL访问接口方法。Iservice接口部分代码如下所示:
publicinterfaceIServiceextendsandroid.os.IInterface
{
publicstaticabstractclassStubextendsandroid.os.Binder{//Stub内部静态抽象类…..
privatestaticclassProxyimplementscom.lifeblood.ITestService
/内部静态类Proxy/………..
publicintgetAccountBalance();
publicintgetCustomerList(inStringbranch,outString[]customerList);
//现的AIDL访问接口方法
3)TestService类的实现
TestService实现类,是Android中普通Service类Android.os.Service子类,是实现AIDL描述接口的重要实现类,但其实现过程有点特殊,是通过定义ItestService.Stub类型成员变量,实现Iservice接口中调用方法,也就是AIDL中定义的描述接口方法。
4)Activity类中启动Service服务
本案例中Service只是提供远程服务,无需在本地Activity中进行访问,所以使用Intent类启动Service即可,代码结构如下:Intentservice=newIntent(this,TestService.class);
startService(service);
5)AndroidManifest.XML中的配置
AndroidManifest.XML文件的配置非常重要,远程服务时其他进程访问定位到服务,就是通过AndroidManifest文件的配置名称进行定位,其Service段配置如下:
6)客户端进程调用
客户进程调用时与JNDI方式相似,通过实现ServiceConnection接口绑定远程服务,获取Service对象,从而实现调用,在客户端实例中也需拷贝AIDL接口文件。
2测试运行
程序运行步骤如下:首先运行TestService服务端;再运行AIDLClient客户端;点击绑定连接AIDL获取Service服务,并显示调用信息。效果如图1所示。
3结束语
本文对AIDL接口描述语言的语法结构及实现原理方式,以及在远程调用过程中AIDL的实现过程,及相关的配置方法进行了分析与探讨。AIDL是按面向对象的设计思想实现进程通讯,且AIDL语言符合Android平台中系统原语规则,为Android系统级开发过程中,进程间通讯提供了较为便利和简单访问模型。
期刊库(http://www.zgqkk.com),是一个专门从事期刊推广、投稿辅导的网站。
本站提供如何投稿辅导,寻求投稿辅导合作,快速投稿辅导,投稿辅导格式指导等解决方案:省级投稿辅导/国家级投稿辅导/核心期刊投稿辅导//职称投稿辅导。
【免责声明】本文仅代表作者本人观点,与投稿辅导_期刊发表_中国期刊库专业期刊网站无关。投稿辅导_期刊发表_中国期刊库专业期刊网站站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。
投稿辅导服务咨询与期刊合作加盟
陆老师联系QQ:
蒋老师联系QQ:
刘老师联系QQ:
联系电话:18015016272
17327192284
投稿辅导投稿邮箱:zgqkk365@126.com
期刊推荐
- 《校园英语》旬刊 省级 教育类学术期刊
- 《吉林教育》旬刊 省级 教育类学术期刊
- 《文教资料》 旬刊 省级
- 《科技风》半月刊 省级 科技类优秀期刊
- 《价值工程》旬刊 国家级 科技统计源期刊
- 《中国实验方剂学杂志》 半月刊 北大核心
- 《电影评介》半月刊 14版北大核心
- 《社科纵横》季刊 社科类优秀期刊
- 《求索》月刊 14版北大核心期刊
- 《中华建设》月刊 国家级 建设类优秀期刊
- 《继续教育研究》月刊 北大核心期刊
- 《网络空间安全》(信息安全与技术)月刊 国
- 《新闻传播》月刊 省级 新闻类优秀期刊
- 《财会月刊》旬刊 14版北大核心
- 《体育文化导刊》月刊 体育类双核心期刊
- 《机械研究与应用》双月刊 省级 机械应用类
- 《公路交通科技》 月刊 北大核心
- 《教学与管理》旬刊 北大核心
- 《新课程研究》旬刊 省级 教育类优秀学术期
- 《中国医药指南》 旬刊 国家级
- 《高教论坛》 月刊 省级
- 《课程教育研究》 旬刊 国家级
- 《语文建设》 旬刊 14版北大核心
- 《教育发展研究》 半月刊 双核心
- 《学术界》 月刊 双核心


