外观
同步 Binder 和 oneway 的区别是什么?
标准回答
普通 AIDL 方法即使返回 void,也默认是同步调用,调用线程要等待服务端事务完成。oneway 不等待远程业务完成或返回值,因此适合某些通知型接口,但服务端仍需要执行工作,调用仍有封装和入队等成本。针对同一个 Binder 节点的异步事务有串行化语义,不能把 oneway 理解为每个请求自动并行。客户端不能依靠 oneway 获取业务成功结果,必要时要设计回调、确认、超时和状态查询。
延伸追问
本地直接调用不会因为 AIDL 标记了 oneway 就自动变成后台异步调用。
内容来源
- Android Framework 知识手册 · 原条目
4-4