位置: 编程技术 - 正文

AIDL实现Android IPC(android aidl binder)

编辑:rootadmin

推荐整理分享AIDL实现Android IPC(android aidl binder),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android iptable,android ioc,android ipc方式,android ipc方式,android aidl使用,android aide,android aidl使用,android ipc方式,内容如对您有帮助,希望把文章链接给更多的朋友!

1.AIDL文本解释

在软件工程中,接口定义语言(IDL)已经成为通用术语,是用来描述软件组件接口的特定语言。在Android中,该IDL被称为Android接口定义语言(AIDL),它是纯文本文件,使用Java类&#;语法编写。但是,编写Java接口的编写AIDL文件还有有些不同的。

首先,对所有的非原始类型参数,需要指定如下三种类型方向指示符之一:in,out,inout。in类型方向指示符只用于输入,客户端不会看到Service对对象的修改。out类型表明输入对象不包含相关的数据,但会由Service生成相关的数据。inout类型是上面两种类型的结合。切记只使用需要的类型,因为每种类型都有相应的消耗。

另一个需要记住的是,所有用于通信的自定义类都需要创建一个AIDL文件,是用来声明该类实现了Parcelable接口。

2.Parcel

Binder事务通常会传递事务数据。这种数据被称为parcel(包裹)。Android提供了相应的API。允许开发者为大多数Java对象创建parcel。

Android中的parcel和JAVA SE中的序列化对象类&#;。不同之处在于,开发者需要使用parcelable实现对象的编解码工作。该接口定义了两个编写Parcel对象的方法,以及一个静态的不可被复写的Creator对象,该对象用来从Parcel中读取相应的对象。如下所示:

前面的代码显示了实现Parcelable接口的CustomData类。注意CREATOR成员对象的实现,以及createFromParcel()如何使用Parcel.readStringList()方法来读取整个List对象,而不需要指定列表的长度,Parcel对象内部会处理这种情况。

实现该接口后就可以通过Binder IPC在应用间发送该类的对象了。

3.Binder简介

Binder IPC通信示意图:

Binder通讯遵循客户端-服务器模式。客户端使用客户端代理来处理与内核驱动程序的通信。在服务器端,Binder框架维护了一系列Binder线程。内核驱动会使用服务器端的Binder线程把消息从客户端代理分发给接受对象。这一点需要特别注意,因为当通过Binder接受Service调用时,它们并不会运行在应用程序的主线程上。这样一来,客户端到远程Service的连接就不会阻塞应用的主线程。

开发者使用Binder基类以及IBinder实现Binder机制。Service组件的Service.onBind()方法会返回实现IBinder接口的类。当Service发布远程API时,开发者通常使用AIDL文件生成IBinder类。

使用Binder通信时,客户端需要知道远程Binder对象的地址。然而,Binder的设计要求只有实现类,比如要调用的Service才知道地址。开发者使用Intent解析来进行Binder寻址。客户端使用action字符串或者组件名来构建Intent对象,然而使用它初始化与远程应用程序的通信,然而,Intent只是实际Binder地址的抽象描述,为了能够建立通信,还需要翻译成实际的地址。

ServiceManager是一个特殊的Binder节点,它巡行在Android系统服务内,管理所有的地址解析,是唯一一个有全局地址的Binder节点。因为所有的Android组件都使用Binder进行通信,它们需要使用ServiceManager进行注册,通过如上所述的地址来进行通信。

客户端想要和Service或者其他组件通信,需要隐式地通过Intent查询ServiceManager来接受Binder地址。

AIDL实现Android IPC(android aidl binder)

4. 完整是实例

AIDL设计到的知识都在前面做了详细的介绍,下面将跑一跑代码验证其可行性。

下面的代码片段是一个名为CustomData.aidl的AIDL文件示例。它应该和Java元代码文件放在同一个包里。

然后需要在AIDL文件中引入所有需要自定义的类,如下所示:

写完上面的代码,忘记提醒开发者,原始类型参数不需要方法指示符。

切记,一旦实现了客户端代码,就不能在修改或者移除AIDL文件中的方法。可以在文件末尾添加新的方法,但是因为AIDL编译器会为每个方法生成标识符,所以不能修改现存的方法,否则不能向后兼容老版本。需要处理新版的API时,建议创建一个新的AIDL文件。这样做允许保持与老版本客户端的兼容。正如上面ApiInterfaceV1文件名,在天际新方法就可以创建一个V2结尾的文件,以此类推。

准备好AIDL文件后,服务器端需要实现

上面的代码中Service在代码末尾实现了ApiInterfaceV1.Stub.该对象也会在onBind()方法中返回给绑定到Service的客户端。注意,每次对ServiceAPI的调用都运行在自身的线程上,因为Binder提供了一个线程池用于执行所有的客户端调用。这意味着使用这种方法时,客户端不会阻塞Service所属的主线程.

服务器端配置文件配置服务如下:

android:exported="true"表示能被其他应用程序调用

android:enabled="true" 服务处于激活状态

以上是服务器端所需要的全部代码

下面的Activity展示了如何绑定到一个远程Service以及检索ApiInterfaceV1接口。如果是该API的唯一用户,可以同时管理客户端和服务器端的版本,那么这是首选的解决方案。

关于Android的上下文“Context” 最近事情好多,又要准备毕业生晚会又有运动会的,心里好乱,根本没有心思接任何项目,只想大睡个三天三夜.....不过生活还是要继续,今天决定深入

JUnit in android android测试框架是基于JUnit(www.junit.org)的,感兴趣的可以看看JUnit的源码,相信会对做unittestinandroid大有帮助的。本文只是一篇介绍JUnit如何用于android的

android中的样式和主题 有的时候我们一个页面要用很多个textview,而且这些textview的样式非常相像,这种情况下我们可以把这些样式抽取出来,然后在每个textview中引用即可,

标签: android aidl binder

本文链接地址:https://www.jiuchutong.com/biancheng/376605.html 转载请保留说明!

上一篇:android改变应用默认起始页(如何修改安卓app的程序)

下一篇:Android中Pull解析器解析xml文件案例(如何得到pull解析器?)

  • 收益性支出和资产的区别
  • 小规模纳税人预缴企业所得税
  • 固定资产进项税的账务处理
  • 处置无形资产属于经营活动吗
  • 购房返现金需要什么资料
  • 发债评级机构 有哪些
  • 应缴所得税包括哪些税种
  • 建筑企业会计科目分类及明细表
  • 行政单位发过节费违法吗
  • 应付职工薪酬社保
  • 库存现金限额一般由开户银行根据企业
  • 印花税资产划转
  • 公对公转账需要多久到账
  • 增值税普通发票和普通发票的区别怎么交税
  • 税控维护费的分录
  • 航空运输的湿租业务按什么缴纳增值税
  • 小规模企业资本结构
  • 审计报告的二维码扫出来是什么
  • 专用发票和普通发票的区别在哪里
  • 企业的不征税收入用于支出所形成
  • 支付宝微信结算属于什么结算方式
  • 企业账面库存过大应怎样处理好
  • 先进行税务登记还是先注册开户银行账号
  • 先计提房租后收到发票 发票附在哪
  • 买卖交什么税
  • 支付给董事的董事费怎么征收个人所得税?
  • 小微企业行业划分标准 工信部
  • 公司给员工发放的福利都要扣个税吗
  • 一个产品要有什么认证
  • 直接计入当期利润的利得,即企业非日常
  • win7系统为什么没有无线网络连接
  • 收到员工的罚款的会计科目
  • 公司为实习生买保险列支什么科目?
  • elementuiicon
  • PHP:pcntl_sigwaitinfo()的用法_PCNTL函数
  • 动态定位
  • api接口是干嘛的
  • 简单聊聊太平天国
  • yolo改进方法
  • 小规模纳税人企业所得税优惠政策最新2023
  • 零售企业商品盘点发生溢余后,在查明原因前,应按
  • phpcms使用教程
  • c语言常用函数用法
  • 以前年度的企业所得税怎么入账
  • 劳务报酬收入是否含税
  • 企业接受捐赠固定资产的运费怎么做账
  • 车船税应计入税金及附加吗
  • 购买金税盘的分录怎么做
  • 工业增加值计算表(按生产法)
  • 企业所得税缴纳模式
  • 服装厂委托物资怎么写
  • 超市被盗怎么办
  • 怎么开具
  • 机械租赁怎么开9个点
  • 工业企业低值易耗品二级科目
  • java程序怎么直接运行
  • 通过sql存储过程发送邮件的方法
  • ubuntu卸载ubuntu-desktop
  • 苹果电脑邮箱添加163邮箱
  • xp系统的本地连接在哪里打开
  • win7宽带连接改成无线网络
  • assets怎么编辑
  • angularjs2
  • jquery validator
  • unity通过脚本控制骨骼节点让模型动起来
  • unity的shader在哪儿
  • 安卓下载手游
  • 怎么关闭android
  • python中的stringvar
  • 公益性捐赠支出属于什么会计科目
  • 广东省电子学校
  • 广西自然人税收管理系统扣缴客户端手机版
  • 在水贝买的黄金
  • 南通国家税务局
  • 营改增后土地增值税
  • 小规模纳税人可以用专票抵扣税吗
  • 供热用地规划指标
  • 打税务局电话
  • 吉林省国税局网站官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设