外观
如何定义一个 AIDL 接口并实现跨进程调用?需要哪些步骤?
标准回答
步骤是:定义双方一致的 .aidl 接口 → 服务端实现生成的 Stub → Service.onBind 返回该 Binder → 客户端 bindService → onServiceConnected 中调用 接口名.Stub.asInterface(binder) → 通过所得接口调用方法 → 不再使用时解绑。
**跨进程的必要条件:**服务和客户端必须位于不同进程才形成真正的 IPC;按调用范围配置服务导出与权限,并处理远端异常及 Binder 线程中的并发访问。
通俗例子
声明查询播放状态的方法,服务端实现 Stub 并通过 Service 暴露;客户端绑定服务获得接口,再调用查询。
深入解释
**AIDL 生成了什么:**AIDL 用接口描述参数和方法,构建时生成客户端代理与服务端 Stub 等代码。客户端持有代理,服务端实现真正的业务方法。
**实现时还要考虑什么:**通过绑定等方式取得服务 Binder 后才能调用;真实跨进程调用要处理权限、线程安全、参数序列化与服务死亡。接口看起来像普通方法,不代表没有 IPC 成本。
易混淆点
同步 AIDL 调用依然会阻塞调用者,不要因为跨进程就误认为自动异步。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
7.2.1