AIDL 服务支持的数据类型
2016-07-11 19:42
453 查看
AIDL 服务只支持有限的数据类型
AIDL 服务只支持有限的数据类型,如果用AIDL服务传递一些复杂的数据就需要做更一步处理, AIDL
服务支持的数据类型如下:
1. Java 的原生类型
2. String 和CharSequence
3. List 和 Map ,List和Map
对象的元素必须是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.java和Product.java文件复制到客户端工程(ch08_complextypeaidlclient),然后绑定AIDL服务,并获得AIDL服务对象,最后调用AIDL服务的方法
运行时,先运行服务器端,再运行客户端程序,先单击绑定AIDL
服务按钮,待成功绑定后,单击调用 AIDL服务按钮.
http://blog.csdn.net/aduovip/article/details/6703516 原文
AIDL 服务只支持有限的数据类型,如果用AIDL服务传递一些复杂的数据就需要做更一步处理, AIDL
服务支持的数据类型如下:
1. Java 的原生类型
2. String 和CharSequence
3. List 和 Map ,List和Map
对象的元素必须是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.java和Product.java文件复制到客户端工程(ch08_complextypeaidlclient),然后绑定AIDL服务,并获得AIDL服务对象,最后调用AIDL服务的方法
运行时,先运行服务器端,再运行客户端程序,先单击绑定AIDL
服务按钮,待成功绑定后,单击调用 AIDL服务按钮.
http://blog.csdn.net/aduovip/article/details/6703516 原文
相关文章推荐
- 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题
- http://blog.csdn.net/isadream/article/details/5746399
- [Cloud Computing]Mechanisms: Domain Name Service
- UVA 12338 Anti-Rhyme Pairs (字符串哈希+二分)
- 正向渲染路径细节 Forward Rendering Path Details
- git: fatal unable to auto-detect email address
- raid0,1,3,5,6,10,50的物理磁盘容量和逻辑容量的关系。
- Cannot retrieve metalink for repository: epel. Please verify its path and try again
- 关于NSString赋值retainCount等于-1
- CCS编译器报错: error #10234-D: unresolved symbols remain
- 易语言免杀360QVM人工智能
- drop、delete、truncate、alter表时show processlist出现Waiting for table metadata lock状态
- Cloudera Error: "Failed to handle Heartbeat Response"
- CodeForces 690C2 Brain Network (medium)(树上DP)
- kail install chinese
- DataType.EmailAddress的ErrorMessage设置中文后,在页面依然显示英文的问题
- vmware esxi 升级 SCSI RAID卡驱动
- CodeForces 690C1 Brain Network (easy) (水题,判断树)
- Contains Duplicate II
- clang -rewrite-objc (转自http://blog.tingyun.com/web/article/detail/845)