Skip to content

binder-messenger-demo ​

1. 实验目标 ​

用最小 Android 实现验证 Binder 跨进程通信机制(对应 docs/01-runtime-concurrency/15):

  • bindService 返回的 IBinder 就是 Binder 代理(跨进程时是 BinderProxy)
  • Messenger:Binder 的高层封装(基于 Handler + Message),双向通信
  • replyTo 机制:客户端把自己的 Messenger 放进 Message,服务端用它回信

2. 工程要点 ​

  • 服务端 MessengerService:Messenger(Handler) 暴露,onBind 返回 messenger.binder
  • 客户端 BinderMessengerDemoActivity:bindService → onServiceConnected 里拿 IBinder 包成 Messenger
  • 双向:客户端 send(MSG_PING, replyTo=自己的Messenger),服务端 replyTo.send(MSG_PONG) 回传
  • 日志打印 IBinder 的实际类名(同进程是 Binder,跨进程是 BinderProxy)

3. 运行方式 ​

bash
cd labs/android/host
./gradlew installDebug

设备/模拟器打开 Android Host → 打开 Binder / Messenger 实验室。

操作:绑定服务 → 发送 PING → 观察日志双向链路 → 解绑。

4. 预期现象 ​

  • 点"绑定服务":日志显示 拿到 IBinder=...(同进程 Binder)
  • 点"发送 PING":Service Toast "收到 PING",客户端日志收到 PONG arg1=101 obj=服务端回包(Binder 双向)
  • 点"解绑":onServiceDisconnected 或解绑日志

5. 常见误区 ​

误区实际情况
Binder 就是 AIDLAIDL 只是 Binder 的 IDL 生成器;Messenger / Bundle 也是 Binder 封装
跨进程才能用 Binder同进程绑定也用 Binder(只是 Binder 直传,无 BinderProxy)
send 是同步调用Messenger.send 是异步投递,跨进程时经 Binder 事务队列

6. 对应知识库文档 ​

7. 关键源码 ​

站点构建时间:2026/8/24 23:43:17