1、android散记-AIDL接口定义语言

来源:互联网 发布:淘宝专业用语 编辑:程序博客网 时间:2024/04/24 20:32

AIDL简介:

Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。

为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。

简单点说, AIDL就是跨进程通信,实现进程(应用)间的数据共享。随着应用的复杂化,单一的应用已很难满足用户的需求 ,这时IPC(进程间通信)就显得尤为重要。比如启动一个应用(进程)时连带着启动另一个应用为其处理复杂问,使应用运行起来也更流畅,用户体验也更好。

在Linux的概念空间中,Android的每个Activity都是一个独立的进程,每个Service也都是一个独立的进程,Activity,Service之间要交换数据属于IPC。IBinder就是为了Activity Service通讯而设计的一个轻量级的IPC框架。IBinder传递的数据被封装到android.os.parcel(注意parcel并非通用的序列化机制,而是专为IBinder设计的)客户端通过IBinder发送请求给服务端,服务端提供实际服务。

——————————————————————————————————————————————————————————————————

实现AIDL的步骤

1、创建AIDL文件

2、实现AIDL文件生成的java接口。

3、向客户端提供接口(一般通过Service实现)

4、客户端调用

——————————————————————————————————————————————————————————————————

创建AIDL文件

AIDL文件的语法跟Java的语法几乎一致,只是文件的扩展名不是.java而是.aidl

DataProvider是Service的子类,DataProvider类中定义了一个内嵌类(AidlImpl),该类是MyAidl.Stub的子类 。  MyAidl.Stub是根据MyAidl.aidl文件自动生成的,一般并不需要管这个类的内容,只需要编写一个继承于MyAidl.Stub类的子类(即AidlImpl)即可。onBind方法必须返回AidlImpl类的对象实例,否则客户端无法获得服务对象。

原创粉丝点击