每日一问 | 可以不借助 bindService,实现跨进程 binder 通信吗?

鸿洋    2022-04-27 23:43   收藏

正在我们在开发的时候,涉及到需要跨进程通信,尤其是较为复杂的,需要拿到服务端 binder 代理进行交互的方式。

一般流程为:

  1. 编写 aidl 文件;
  2. 实现一个 Service 子类(独立进程),复写 onBind 方法,返回 Binder's Stub;
  3. 主进程通过调用 bindService,间接拿到 binder 驱动,然后实现 binder 通信;

更进一步的说,很多时候,我们也可以不依赖 aidl 文件,自己去实现Stub、Proxy类,利用 binder 驱动通过 transact 方法与服务端 Stub onTransact 进行跨进程交互。

但是依然是需要依赖 bindService 方法,去获取 binder驱动。

可以参考:Android aidl Binder框架浅析

不过我们今天的关注点在于:

  1. 可以不通过 bindService ,利用别的方式来传递 “binder 驱动”来实现跨进程通信吗?
  2. framework 层有哪些地方使用了 1 的方式进行通信?

自助提问入口:点击提交问题