Android进程间通信:自定义类型 parcelable 实现

需积分: 15 2 下载量 71 浏览量 更新于2024-07-10 收藏 1.56MB PPT 举报
"进程间传递自定义类型参数-最新android技术总结" 在Android中,进程间通信(IPC,Inter-Process Communication)是应用之间共享数据的关键技术。AIDL(Android Interface Definition Language)是Android提供的一种机制,允许不同进程间的对象互相调用方法。然而,Aidl默认只支持基础数据类型和一些特定的类,如String、List、Map等。如果要传递自定义类型,我们需要使自定义类型支持Parcelable协议。 实现自定义类型在进程间传递的步骤如下: 1. 实现Parcelable接口:首先,你需要让你的自定义类型(例如`Person`)实现`Parcelable`接口。这需要重写`describeContents()`和`writeToParcel(Parcel dest, int flags)`方法。`writeToParcel()`用于将对象的状态(即它的属性)写入Parcel对象,而`describeContents()`通常返回0,表示不包含任何特殊内容。 2. 定义CREATOR:自定义类型中还需要包含一个名为`CREATOR`的静态成员,它是一个实现了`Parcelable.Creator`接口的匿名内部类。`Creator`有两个方法,`createFromParcel(Parcel source)`用于从Parcel中读取数据并构建新的对象,`newArray(int size)`则用于创建指定大小的自定义类型数组。 3. 创建AIDL文件:在自定义类型所在的包下创建一个与自定义类型同名的AIDL文件,例如`Person.aidl`。在AIDL文件中,使用`parcelable`关键字声明自定义类型。 4. 在AIDL接口中使用自定义类型:创建一个AIDL接口,比如`IPersonService.aidl`,导入自定义类型并声明需要的方法。在方法签名中使用自定义类型,例如`void save(in Person person);` 5. 实现AIDL接口:在服务端,你需要继承AIDL接口生成的 Stub 类来实现接口方法。例如,创建`ServiceBinder`类,继承`IPersonService.Stub`,并在`save(Person person)`方法中处理接收到的数据。 6. 配置Service:在服务(如`PersonService`)的`onBind(Intent intent)`方法中返回实现了AIDL接口的对象(`ServiceBinder`实例)。 7. 客户端使用:客户端应用需要拷贝服务端的AIDL文件和自定义类型文件到自己的源码目录,Eclipse或Android Studio会自动生成对应的接口类。然后,客户端可以通过绑定服务的方式调用远程服务的方法,传递自定义类型对象。 8. 配置AndroidManifest.xml:确保服务在`AndroidManifest.xml`中被正确声明,并设置意图过滤器以便客户端可以找到并绑定服务。 在这个例子中,`Person`类实现了Parcelable接口,`Person.aidl`文件声明了`Person`类型,`IPersonService.aidl`接口定义了`save`方法,`ServiceBinder`实现了服务端的逻辑,而客户端通过`bindService()`方法与服务进行通信,传递`Person`对象。 此外,3G(第三代移动通信)是一种支持多媒体通信的高速移动通信标准,包括WCDMA、CDMA2000和TD-SCDMA等。智能手机软件平台包括Symbian、Windows Mobile、RIM BlackBerry、Android、iPhone和Java/J2ME等,其中Android是由Google主导的开源移动操作系统,包含操作系统、中间件和核心应用。Android的架构分为三层,底层基于Linux内核,中间层提供各种服务和库,顶层则是应用程序和框架。