2. AIDL 语法与接口设计

AIDL(Android Interface Definition Language)是 Binder 通信的接口契约语言。本章深入拆解 AIDL 的接口定义关键字、数据类型映射规则、导包规范以及 in/out/inout 方向标记的底层语义,帮助你在设计跨进程接口时写出高效、类型安全的 .aidl 文件。

2.1 接口定义关键字

AIDL 接口使用以下三个核心关键字构建方法签名和调用行为:

关键字 位置 语义 示例
interface 文件顶级 声明一个 AIDL 接口,Binder 通信的契约入口 interface IWeatherService { ... }
oneway 方法修饰符 异步调用,不等待服务端返回;服务端收到后立即返回,客户端不阻塞 oneway void shutdown();
in / out / inout 参数方向标记 指示参数在 Binder 传输中的流动方向 in String cityCode
🔴 重要约束:oneway 方法不能有返回值,且参数只能使用 in 方向(不允许 out / inout)。服务端即使返回数据,客户端也无法接收。

下面是一个完整的 AIDL 接口定义,综合展示了上述关键字和方向标记的用法:

// IWeatherService.aidl
package com.example.weather;

import com.example.weather.WeatherData;

interface IWeatherService {
    /** 查询天气 — in 方向:客户端传入城市码 */
    WeatherData getCurrentWeather(in String cityCode);

    /** 上报天气 — out 方向:服务端填充数据返回给客户端 */
    void reportWeather(out WeatherData data);

    /** 更新天气 — inout 方向:双向传递 */
    boolean updateWeatherData(inout WeatherData data);

    /** 异步关闭服务 — oneway,无返回值 */
    oneway void shutdown();
}
AIDL 接口定义语法与方向标记 AIDL 接口定义 package com.example.weather; ← 上一章 📖 返回目录 下一章 →