ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 描述 定向tag是AIDL中语法的一部分,其中in、out、inout是三个定向tag。 在官网上关于Android定向tag的定义是这样的: > All non-primitive parameters require a directional tag indicating which way the data goes . Either in , out , or inout . Primitives are in by default , and connot be otherwise . 意思就是所有非基本类型的参数都需要一个定向tag来表明数据是如何走向的,要不是in,out或者inout。基本数据类型默认是in,而且不能是其他tag。 根据上述的声明,我们大概猜一下,得出这样的结论: 定向 tag 表示了在跨进程通信中数据的流向,其中 in 表示数据只能由**客户端流向服务端**, out 表示数据只能由**服务端流向客户端**,而 inout 则表示数据可以在**服务端与客户端之间双向流通**。其中的数据流向是针对在客户端中的那个传入方法的对象而言的。 ## in 对于in,服务端将会收到客户端对象的**完整数据**,但是客户端对象**不会因为服务端对传参的修改而发生变动**。类似的行为在Java中的表现是,在Java方法中,对传进来的参数进行了深复制,传进来的参数不会受到深复制后的对象的影响。这和in的行为有点类似。 ## out 对于out,服务端将会收到**客户端对象**,该**对象不为空**,但是它里面的**字段为空**,但是在服务端对该对象作任何修改之后客户端的传参对象都会**同步改动**。类似的行为在Java中的表现是,在Java方法中,对传进来的参数进行忽略,并new一个新对象,所有的操作都是围绕着这个新对象进行的,最后将该新对象赋值给传参对象。 ## inout 对于inout ,服务端将会接收到客户端传来**对象的完整信息**,并且客户端将会**同步服务端对该对象的任何变动**。类似的行为在Java中的表现是,在Java方法中,对传进来的参数进行修改并返回。 [AIDL中的in、out、inout的区别](https://www.jianshu.com/p/a61da801b919 )