Android 接口定义语言AIDL使用解说

转载 2015年11月18日 23:16:25

1.什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口
icp:interprocess communication :内部进程通信

 

2.既然aidl可以定义并实现进程通信,那么我们怎么使用它呢?文档/android-sdk/docs/guide/developing/tools/aidl.html中对步骤作了详细描述:

--1.Create your .aidl file - This file defines an interface (YourInterface.aidl) that defines the methods and fields available to a client. 
创建你的aidl文件,我在后面给出了一个例子,它的aidl文件定义如下:写法跟java代码类似,但是这里有一点值得注意的就是它可以引用其它aidl文件中定义的接口,但是不能够引用你的java类文件中定义的接口

--2.Add the .aidl file to your makefile - (the ADT Plugin for Eclipse manages this for you). Android includes the compiler, called AIDL, in the tools/ directory. 
编译你的aidl文件,这个只要是在eclipse中开发,你的adt插件会像资源文件一样把aidl文件编译成java代码生成在gen文件夹下,不用手动去编译:编译生成AIDLService.java如我例子中代码


--3.Implement your interface methods - The AIDL compiler creates an interface in the Java programming language from your AIDL interface. This interface has an inner abstract class named Stub that inherits the interface (and implements a few additional methods necessary for the IPC call). You must create a class that extends YourInterface.Stub and implements the methods you declared in your .aidl file. 
实现你定义aidl接口中的内部抽象类Stub,public static abstract class Stub extends android.os.Binder implements com.cao.android.demos.binder.aidl.AIDLService
Stub类继承了Binder,并继承我们在aidl文件中定义的接口,我们需要实现接口方法,下面是我在例子中实现的Stub类:
  

Stub翻译成中文是存根的意思,注意Stub对象是在被调用端进程,也就是服务端进程,至此,服务端aidl服务端得编码完成了。

--4.Expose your interface to clients - If you're writing a service, you should extend Service and override Service.onBind(Intent) to return an instance of your class that implements your interface. 
第四步告诉你怎么在客户端如何调用服务端得aidl描述的接口对象,doc只告诉我们需要实现Service.onBind(Intent)方法,该方法会返回一个IBinder对象到客户端,绑定服务时不是需要一个ServiceConnection对象么,在没有了解aidl用法前一直不知道它是什么作用,其实他就是用来在客户端绑定service时接收service返回的IBinder对象的:

 

mService就是AIDLService对象,具体可以看我后面提供的示例代码,需要注意在客户端需要存一个服务端实现了的aidl接口描述文件,但是客户端只是使用该aidl接口,不需要实现它的Stub类,获取服务端得aidl对象后mService = AIDLService.Stub.asInterface(service);,就可以在客户端使用它了,对mService对象方法的调用不是在客户端执行,而是在服务端执行。

4.aidl中使用java类,需要实现Parcelable接口,并且在定义类相同包下面对类进行声明:

上面我定义了Rect1类
之后你就可以在aidl接口中对该类进行使用了
package com.cao.android.demos.binder.aidl;  
import com.cao.android.demos.binder.aidl.Rect1;
interface AIDLActivity {   
    void performAction(in Rect1 rect);   
}  
注意in/out的说明,我这里使用了in表示输入参数,out没有试过,为什么使用in/out暂时没有做深入研究。

5.aidl使用完整示例,为了清除说明aidl使用,我这里写了一个例子,例子参考了博客:

http://blog.csdn.net/saintswordsman/archive/2010/01/04/5130947.aspx

作出说明

例子实现了一个AIDLTestActivity,AIDLTestActivity通过bindservice绑定一个服务AIDLTestService,通过并获取AIDLTestActivity的一个aidl对象AIDLService,该对象提供两个方法,一个是registerTestCall注册一个aidl对象,通过该方法,AIDLTestActivity把本身实现的一个aidl对象AIDLActivity传到AIDLTestService,在AIDLTestService通过操作AIDLActivity这个aidl远端对象代理,使AIDLTestActivity弹出一个toast

相关文章推荐

android服务_进程间通信IPC和aidl接口定义语言的使用

一、基本概念 (1)远程服务:运行在其他应用里面的服务 (2)本地服务:运行在自己应用里面的服务 (3)进行进程间通信IPC (4)aidl Android interface Definat...

Android 接口定义语言(AIDL)

Android Interface Definition Language (AIDL) In this document Defining an AIDL Interface ...

aidl(android 接口定义语言)

远程服务:调用者和服务在不同的工程代码里面。 本地服务:调用者和服务在同一个工程代码里面。每一个应用程序都是运行在自己独立的进程里面的。 进程操作系统分配内存空间的一个单位。进程的数据都是独立的。独立...

Android的接口定义语言(aidl)

AIDL与其他的接口定义语言很相似。它允许你定义程序接口,用它来在进程间进行交流。在Android系统中,进程之间是相互独立的。它们需要将它们的对象解释成操作系统理解的基本体。这个处理过程是复杂的,所...

Android接口定义语言---AIDL(四)

调用IPC方法 以下是调用AIDL所定义的远程接口的必须的步骤: 1. 在工程的src/目录中包含对应的.aidl文件; 2. 声明IBinder接口(基于AIDL生成的)的一个实例; 3. ...

Android接口定义语言---AIDL(三)

在IPC通道上传递对象 如果要通过IPC接口把一个类从一个进程发送到另一个进程,这是可以做到的。但是必须确保该类的代码对应IPC通道另一侧的进程是可用的,并且该类必须支持Parcelable接口。支...

Android 接口定义语言 (AIDL)

Android 接口定义语言 (AIDL) AIDL(Android 接口定义语言)与您可能使用过的其他 IDL 类似。 您可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信...

Android学习之跨进程通信安卓接口定义语言AIDL(一)

今天来写下安卓接口定义语言,也就是大家听了都头疼的AIDL,今天有幸看到慕课网的AIDL视频学习了一下,在此感谢慕课网,是个很不错的网站。 进入正题,Android中跨进程是如何传递数据的?如果是Se...

android aidl 安卓接口定义语言 介绍

AIDL:Android InterfaceDefinition Language,即Android接口定义语言。其实就是用来生成java层对应的binder 接口,还是以之前的ItestServic...

Android接口定义语言---AIDL(一)

本文译自:http://developer.android.com/guide/components/aidl.html AIDL(AndroidInterface Definition...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 接口定义语言AIDL使用解说
举报原因:
原因补充:

(最多只允许输入30个字)