完整教程:如何在AIDL中传递List和Map数据类型?

在 AIDL 中传递 List 和 Map 的核心原则是:List 和 Map 本身不需要额外实现 Parcelable 接口,但它们包含的元素必须是 AIDL 支持的数据类型

AIDL 天然支持 java.util.List 和 java.util.Map,但有一些重要的限制和规则需要遵守。


一、传递 List

1. 核心规则
  • 元素类型限制List 中的元素必须是以下类型之一:
    • AIDL 基本类型(intStringboolean 等)。
    • 实现了 Parcelable 接口的自定义对象。
    • 其他 AIDL 接口。
  • 泛型指定:在 AIDL 文件中,必须使用泛型来明确指定 List 中元素的类型。
  • 方向标记:和传递其他复杂对象一样,List 作为方法参数时,也需要指定方向标记(inoutinout)。
2. 示例:传递 List<String>

假设我们要实现一个服务,它可以接收并返回一个字符串列表。

步骤 1: 定义 AIDL 接口

创建 IMyService.aidl 文件:

// IMyService.aidl
package com.example.myapplication;
import java.util.List; // 必须导入 List
interface IMyService {
    /**
     * 接收一个字符串列表,并返回一个新的字符串列表
     * @param stringList 传入的字符串列表
     * @return 处理后的字符串列表
     */
    List processStringList(in List stringList);
}
  • 注意in List<String> stringList 中的 in 标记表示数据从客户端流向服务端。

步骤 2: 服务端实现

在 MyService.java 中实现 processStringList 方法:

// MyService.java
//
posted @ 2026-02-08 08:13  yangykaifa  阅读(3)  评论(0)    收藏  举报