当前位置: 代码迷 >> 综合 >> AIDL 方法参数的in out inout前缀作用
  详细解决方案

AIDL 方法参数的in out inout前缀作用

热度:18   发布时间:2023-12-12 20:18:19.0

前言

最近公司项目需要用aidl,遇到了方法参数传过去为空的问题,最后把所有参数前缀改成inout搞定,虽然避免了问题,但还是解决问题比较好,于是我花了大半个下午枚举了下,测试出了这些前缀的作用。

定义

  • 前缀的作用是相对于调用这个方法的对象而言的;可将调用者称为客户端,实现方法的叫服务端
  • 将服务端能够在客户端调用方法后可以正确收到方法参数值(不报错,不为空),称之为客户端可以写入
  • 将客户端能够在服务端改变参数的值后收到改变后的值,称之为服务端可以写入

测试

客户端 服务端 结果
in in ? 客户端可以写入;服务端不能写入
in out ? 客户端不能写入(为空);服务端不能写入
in inout ? 客户端可以写入;服务端不能写入
out in ? 客户端不能写入(报错)
out out ? 客户端不能写入(为空);服务端可以写入
out inout ? 客户端不能写入(报错)
inout in ? 客户端可以写入;服务端不能写入
inout out ? 客户端不能写入(为空);服务端可以写入
inout inout ? 客户端可以写入;服务端可以写入

结论:

  • 两边都有in时,客户端才能写入。
  • 两边都有out时,服务端才能写入。
  • 客户端为out,且服务端有in时,会报空指针异常。
  • 客户端和服务端方法参数前缀可以不同,但如果方法不同(比如一方多了方法)则可能造成问题。