在线客服系统

期刊库

教育   经济   科技   财会   管理   
医学   法学   文史   工业   建筑   
农学   水利   计算机   更多>>
 首 页    论文大全   论文精品    学术答疑    论文检测    出书咨询    服务流程    诚信通道    关于我们 

基于AIDL进程间通信技术研究与分析

人气指数: 发布时间:2013-12-03 13:10  来源:http://www.zgqkk.com  作者: 胡安明
分享到:

 

  摘要:进程间通信是操作系统中非常重要基础功能,实现进程通信有多种技术,比如管道通信流,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在线咨询
    投稿辅导热线:
    180-1501-6272
    微信号咨询:
    fabiaoba-com
    咨询电话:18015016272 投稿邮箱:zgqkk365#126.com(#换成@)
    本站郑重声明:文章只代表作者观点, 并不意味着本站认同。所载文章、数据仅供参考,使用前请核实,风险自负。
    部分作品系转载,版权归原作者或相应的机构   若某篇作品侵犯您的权利,请来信告知.版权:周口博闻教育咨询有限公司 
    Copyright © 2005-2023 . 期刊库 版权所有