跨进程访问(AIDL服务)
Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。Activity和Broadcast都可以跨进程通信,除此之外,Content Provider也可以进行跨进程通信。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口,称为AIDL(Android Interface Definition Language)服务。

在Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢? 显然, Java中是不支持跨进程内存共享的。因此要传递对象, 需要把对象解析成操作系统能够理解的数据格式, 以达到跨界对象访问的目的。在JavaEE中,采用RMI通过序列化传递对象。在Android中, 则采用AIDL(Android Interface Definition Language:接口描述语言)方式实现。

建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:
(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。详细介绍见后面实例的内容。
(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
(3)建立一个服务类(Service的子类)。
(4)实现由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。

AIDL对Java类型的支持:
1.AIDL支持Java原始数据类型。
2.AIDL支持String和CharSequence。
3.AIDL支持传递其他AIDL接口,但你引用的每个AIDL接口都需要一个import语句,即使位于同一个包中。
4.AIDL支持传递实现了android.os.Parcelable接口的复杂类型,同样在引用这些类型时也需要import语句。(Parcelable接口告诉Android运行时在封送(marshalling)和解封送(unmarshalling)过程中实现如何序列化和反序列化对象,你可以很容易联想到java.io.Serializable接口。有些朋友可能会有疑问,两种接口功能确实类似,但为什么Android不用内置的Java序列化机制,而偏偏要搞一套新东西呢?这是因为Android团队认为Java中的序列化太慢,难以满足Android的进程间通信需求,所以他们构建了Parcelable解决方案。Parcelable要求显示序列化类的成员,但最终序列化对象的速度将快很多。另外要注意的是,Android提供了两种机制来将数据传递给另一个进程,第一种是使用Intent将数据束(Bundle)传递给Activity,第二种也就是Parcelable传递给Service。这两种机制不可互换,不要混淆。也就是说,Parcelable无法传递给Activity,只能用作AIDL定义的一部分)。
5.AIDL支持java.util.List和java.util.Map,但是有一些限制。集合中项的允许数据类型包括Java原始类型、String、CharSequence或是android.os.Parcelable。无需为List和Map提供import语句,但需要为Parcelable提供import语句。
6.非原始类型中,除了String和CharSequence以外,其余均需要一个方向指示符。方向指示符包括in、out、和inout。in表示由客户端设置,out表示由服务端设置,inout表示客户端和服务端都设置了该值。

选择AIDL的使用场合
何时使用AIDL:只有你允许客户端从不同的应用程序为了进程间的通信而去访问你的service,以及想在你的service处理多线程。

更多相关文章

  1. tcping测试服务器TCP端口
  2. android基于注解实现类似spring服务端框架
  3. Android中,如何在其他类调用Activity的方法,适用于类似场景
  4. 如何让Android系统或Android应用执行shell脚本
  5. 2011年Android(安卓)MediaPlayer学习笔记之一
  6. AIDL进程间传递复杂数据类型—AIDL传递android.os.Parcelable接
  7. android 对象传输及parcel机制
  8. 手把手教你如何创建一个连接到Binder上的服务(图文)(一)
  9. Recyclerview条目可拖拽可侧滑删除实战详解

随机推荐

  1. [Android各版本特性]Android(安卓)7.0 No
  2. 刚刚接触Android,写第一个Hello world 小
  3. Android自学笔记(番外篇):全面搭建Linux环境
  4. android布局属性预览
  5. android 环境的搭建
  6. Android实现文件夹目录选择器
  7. Android(安卓)showDialog时报错requestFe
  8. android之写文件到sd卡
  9. android Java 笔试考题
  10. Android(安卓)的Platform version 和 API