先把结论放在前面:Messenger 是对 AIDL 的二次封装——它把"一次 RPC 调用"换成"往对方的Handler队列里塞一条Message",用队列换来了串行语义与天然的任务隔离。因此判断标准只有一条:低频、单向、不需要即时返回值的命令或回传用 Messenger;需要返回值、需要并发、或高频调用用裸 AIDL。
分档很清楚:只会说"Message 也能跨进程"属于会用;能补出Messenger底层就是 AIDL 实现的IIncomingMessenger、以及它天然串行的原因,属于懂原理;能讲清"为什么高频用 Messenger 会出现延迟累积"背后的队列机制,说明踩过坑。
两个方案的机制对比
| 维度 | 裸 AIDL | Messenger |
|---|---|---|
| 底层 | Binder.transact | AIDL 实现的IIncomingMessenger |
| 通信模型 | RPC:调用即阻塞等回复 | 消息:投递即返回 |
| 处理线程 | 服务端多个 Binder 线程并发</ |