- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
eoe 移动开发者社区 /
负责人:sfshine
原文链接:/intl/zh-CN/guide/components/aidl.html
Android接口定义语言(AIDL)
Android接口定义语言(以下简称AIDL)和其他您使用过得IDL差不多,他使您可以定义应用
程序的接口。通过这个接口,客户端和服务器之间可以顺利的进行进程间通讯(IPC)。在a
ndroid设备上,一个进程的不能通过正常的方式访问其他进程的内存,也就是说,必须把
需要通信的对象翻译成操作系统可以识别的原语,通过这些原语才能穿越这些对象的外表,
从而得到该物体的内部信息。如果使用用代码来做这些事情,那将非常枯燥和乏味,因此,
android为您提供了AIDL。
注意:只有您允许来自不同应用的客户端访问您的IPC服务并且您希望在服务中处理多线
程,使用AIDL才是必要的。如果您不需要使用并发的IPC访问不同的应用,您应该通过继
承Binder来创建您的接口,或者,如果您确实需要使用IPC,但是不需要处理多线程,那
请继承Messenger来实现您的接口。总之,在实现一个AIDL之前,请确保您已经理解了Boun
d Services。
在您开始设计您的AIDL接口的时候,请注意AIDL接口的调用都是直接的函数调用。请不要
想当然的认为这个调用是发生在线程里。具体的情况会取决于这个调用发生在本地进程还是
远程进程。描述如下:
发生在本地进程的调用会在发生这个调用的线程里执行。如果这是您的主UI线程,这个线
程将会持续的在AIDL接口接口中执行。如果这是其他的线程,那这个线程将会是在服务中
执行您的代码的那一个。那么,只有本地线程在访问服务,您才能完全控制是那些线程在这
个服务里发生(但是如果是这种情况,那您不应该使用AIDL,而是通过继承Binder创建一
个接口)。
发生在远程的调用是在该平台所维护的,您的进程内部的一个线程池中发送的。您必须准备
好从未知的线程里接收调用,与此同时,多重调用也会发生。换句话说,AIDL接口的实现
必须是完全线程安全的。
单向(oneway)的关键字传输决定了远程调用的行为。使用时,一个远程调用不会被阻塞,
它只是发送需要交流的数据然后立即返回。这个接口的实现最终就像一个来自Binder线程
池的调用一样作为一个普通的远程调用而被接受。如果单向是在本地被调用的,那他将不会
有任何影响,而这个调用是一直同步的。
声明一个AIDL接口
您必须在一个.aidl格式的文件里使用java程序语言的语法声明AIDL接口,并且把它放到
承载这个服务的应用和绑定这个服务的应用的源代码的文件夹(文件夹src/)下。
当您创建一个含有.aidl格式的文件的应用时,Android SDK工具会基于这个.aidl文件自动
生成一个IBinder的接口并且把它保存到工程的gen文件夹下。这个服务必须正确的继承I
Binder接口。这样客户程序就可以绑定这个服务,从而可以从IBinder中调用方法来执行I
eoe 移动开发者社区 /
PC。
使用一下步骤通过AIDL建立一个边界服务:
1.创建一个.aidl:
这个文件使用签名方法定义一个一应用程序接口。
2.继承这个接口:
这个Android SDK工具使用Java应用程序语言基于您的.aidl文件生成一个接口。这个接
口有一个叫Stub的内部抽象类,这个类继承自Binder并且实现您的AIDL接口中的方法。
您必须继承这个Stub类并且实现这些方法。
3.Expose the interface to clients
把接口暴露给客户端: 继承一个Service并且重写onBind()来返回您实现的Stub类。
注意:为了避免打断使用您服务的其他应用,在您第一次打开AIDL接口的时候,您对AIDL
接口的任何改变必须保持向后兼容。这就是说,您必须保证对原始接口的支持,因为为了可
以访问您的服务接口,您的.aidl文件已经被复制到了其他应用程序里面。
1. 创建一个.aidl
AIDL使用一个简单的语法,让你一个接口与一个或多个参数和返回值的方法,可以申报。
参数和返回值可以是任何类型,甚至其他AIDL生成的接口。 AIDL使用一种简单的语法使
您使用一个或者多个可以输入参数输出返回值的方法来声明一个接口。这些参数和返回值可
以是任何数据类型,甚至是AIDL生成的接口。 您必须使用java语言构建一个.aidl文件。
每个.aild文件必须定义一
您可能关注的文档
- 《量子力学基础与原子、分子及晶体结构》习题与思考题.doc
- 《面向对象程序设计C++》期末试卷和标准答案(B).doc
- 数据通信原理 第04篇 信道.ppt
- 《偏微分方程》第2节 一阶拟线性方程.ppt
- 《软件工程》DFD图及数据字典.doc
- 数据通信原理第5节.ppt
- 数据无损压缩技术的应用和硬件实现.pdf
- 数据压缩发展历程.doc
- 《数据结构》第七八九节课件_2010.pdf
- 《数据结构》第三篇课件_2010.pdf
- 2024年江西省高考政治试卷真题(含答案逐题解析).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)物理试卷(含答案详解).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)地理试卷(含答案详解).pdf
- 2024年内蒙通辽市中考化学试卷(含答案逐题解析).docx
- 2024年四川省攀枝花市中考化学试卷真题(含答案详解).docx
- (一模)长春市2025届高三质量监测(一)化学试卷(含答案).pdf
- 2024年安徽省高考政治试卷(含答案逐题解析).pdf
- (一模)长春市2025届高三质量监测(一)生物试卷(含答案).pdf
- 2024年湖南省高考政治试卷真题(含答案逐题解析).docx
- 2024年安徽省高考政治试卷(含答案逐题解析).docx
文档评论(0)