AIDL 服务支持的数据类型

本文详细介绍了Android接口定义语言(AIDL)支持的数据类型及如何处理复杂数据类型的传递。包括Java原生类型、String和CharSequence、List和Map、自动生成的接口、实现Parcelable接口的类等,并给出了具体的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 AIDL 服务只支持有限的数据类型

AIDL 服务只支持有限的数据类型,如果用AIDL服务传递一些复杂的数据就需要做更一步处理,  AIDL 服务支持的数据类型如下:
1. Java
的原生类型
2. String
CharSequence
3. List
Map ,ListMap 对象的元素必须是AIDL支持的数据类型;  以上三种类型都不需要导入(import)
4. AIDL
自动生成的接口  需要导入(import)
5.
实现android.os.Parcelable 接口的类.  需要导入(import) 

要传递一个需要import 的数据类型的值(: 实现Parcelable接口的类),除了要建立一个实现Parcelable 接口的类外, 还需要为这个类单独建立一个aidl 文件, 并使用parcelable 关键字进行定义.

. 服务器端

具体步骤如下:

1.  建立一个IMyService.aidl 文件,代码如下:

package net .blogjava.mobile.complex.type.aidl;

import  net.blogjava.mobile.complex.type.aidl.Produce;

interface  IMyService  {

     Map  getMap(in String country,  in  Product  product);

     Product  getProduct();

}

注意:   如果方法参数的类型不是原生类型,如String,List或自定义实体类,需要使用in out inout 修饰,in表示这个值被客户端设置; out  表示这个值被服务端设置,inout 表示这个值既被客户端设置,又被服务端设置.

2. 编写 Product  ,该类是用于传递的数据类型,它实现了Parcelable接口,用于序列化对象,之所以不用java.io.Serializable 接口,是因为Serializable 接口序列化的效率没有Parcelable接口高

(1)  Product 类中必须有一个静态常量,常量名必须为CREATOR,而且CREATOR 常量的数据类型必须是Parcelable.Creator

(2) writeToParcel 方法中需要将要序列化的值写入 Parcel 对象

3.  建立一个Product.aidl 文件,代码: parcelable Product;

4.  编写一个MyService

5.  AndroidManifest.xml文件中配置MyService ,代码:

<service android:name=".MyService">

     <intent-filter><action android:name="net.blogjava.mobile.complex.type.aidl.IMyService"/></intent-filter>

</service>

.客户端

首先将IMyService.javaProduct.java文件复制到客户端工程(ch08_complextypeaidlclient),然后绑定AIDL服务,并获得AIDL服务对象,最后调用AIDL服务的方法

运行时,先运行服务器端,再运行客户端程序,先单击绑定AIDL 服务按钮,待成功绑定后,单击调用 AIDL服务按钮.

http://blog.youkuaiyun.com/aduovip/article/details/6703516 原文

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值