如何在AIDL中传递List和Map数据类型?
在 AIDL 中传递 List 和 Map 的核心原则是:List 和 Map 本身不需要额外实现 Parcelable 接口,但它们包含的元素必须是 AIDL 支持的数据类型。
AIDL 天然支持 java.util.List 和 java.util.Map,但有一些重要的限制和规则需要遵守。
一、传递 List
1. 核心规则
- 元素类型限制:
List中的元素必须是以下类型之一:- AIDL 基本类型(
int,String,boolean等)。 - 实现了
Parcelable接口的自定义对象。 - 其他 AIDL 接口。
- AIDL 基本类型(
- 泛型指定:在 AIDL 文件中,必须使用泛型来明确指定
List中元素的类型。 - 方向标记:和传递其他复杂对象一样,
List作为方法参数时,也需要指定方向标记(in,out,inout)。
2. 示例:传递 List<String>
假设我们要实现一个服务,它可以接收并返回一个字符串列表。
步骤 1: 定义 AIDL 接口
创建 IMyService.aidl 文件:
// IMyService.aidl
package com.example.myapplication;import java.util.List; // 必须导入 Listinterface IMyService {/*** 接收一个字符串列表,并返回一个新的字符串列表* @param stringList 传入的字符串列表* @return 处理后的字符串列表*/List<String> processStringList(in List<String> stringList);
}
- 注意:
in List<String> stringList中的in标记表示数据从客户端流向服务端。
步骤 2: 服务端实现
在 MyService.java 中实现 processStringList 方法:
// MyService.java
// 