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

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

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 服务的方法

 

http://blog.csdn.net/aduovip/article/details/6703516 原文

目录
相关文章
|
JavaScript 数据可视化 前端开发
echart图表
echart图表
300 0
【其他】邮箱的IMAP/SMTP服务开启与关闭(实现邮箱发送验证码的前提)
【其他】邮箱的IMAP/SMTP服务开启与关闭(实现邮箱发送验证码的前提)
2537 0
【其他】邮箱的IMAP/SMTP服务开启与关闭(实现邮箱发送验证码的前提)
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
1108 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
|
Linux 文件存储
定期删除服务器n天前日志
该内容介绍了如何在Linux中删除指定目录及子目录下超过n天的文件。使用`find`命令结合参数`/nas/logs/* -maxdepth 3 -type d -ctime +6`查找6天前的目录,然后通过`xargs rm -rvf`进行删除。在CentOS中,可以编辑crontab设置定时任务,例如每天1点执行此删除操作:`0 1 * * * find /nas/logs/* -maxdepth 3 -type d -ctime +6 | xargs rm -rvf`,其中`+6`可按需调整。
284 2
|
Ubuntu 开发工具 git
ESP32-C3 VScode开发环境搭建(基于ESP-IDF—Windows和Ubuntu双环境)
对于ESP32-C3开发,自己对Arduino环境使用起来很是不习惯,既然乐鑫官方都出对应的环境,还是来试试官方环境
3850 0
ESP32-C3 VScode开发环境搭建(基于ESP-IDF—Windows和Ubuntu双环境)
|
JavaScript 前端开发
vue实现登录界面
vue实现登录界面
372 0
|
数据采集
IQR法(四分位距法)
IQR法(四分位距法)
|
SQL 缓存 网络协议
网络信息安全实验 — 网络攻击技术实验(Kali系统,John、lc7、arpspoof、ettercap、SQL注入...)
本人深感网络安全实验有点麻烦,花了一个晚上弄了部分,特此将笔记贡献造福后人,个人能力有限,还会继续更新。。。 汇报题目:**15分钟教你用 Python 写一个 arpspoof**(课件准备ing,如果弄完后续补上) 第一次网络安全实验(密码学)也是我做的,这里先放个自制工具:[Java实现密码学工具,集成了对称加密算法DES,AES,IDEA,公开加密算法RSA,ECC,散列算法MD5,SHA1,CRC32,以及RSA,DSA,ECDSA数字签名验证示例。](https://blog.csdn.net/weixin_43734095/article/details/105303562)
1969 0
网络信息安全实验 — 网络攻击技术实验(Kali系统,John、lc7、arpspoof、ettercap、SQL注入...)
【简洁】三步开启QQ邮箱SMTP服务并获取授权码
【简洁】三步开启QQ邮箱SMTP服务并获取授权码
|
算法
优惠券算法解析
基于单张优惠券与叠加优惠券的算法解析及场景举例。
2186 1