Android AIDL inout参数

Android AIDL inout参数,android,aidl,Android,Aidl,我想知道AIDL中的inout参数是干什么用的 我知道该做什么,该做什么。(out不会封送传递的对象) 但我不明白这是为什么 我已经看过了: 但还是不明白 从我的测试中,参数被传递,就像在中指定它一样 因此,如果有任何一个1可以阐明什么是inout,那将是有帮助的 谢谢中的参数仅从调用者传输到被调用者。out参数从被调用方传输到调用方。并且,inout参数是双向传输的 当您将对象传递给被调用者并被调用者更改对象时,您将使用inout参数。这里是解释AIDL中方向标记的我的版本 它只是一个指示数

我想知道AIDL中的inout参数是干什么用的

我知道该做什么,该做什么。(out不会封送传递的对象)

但我不明白这是为什么

我已经看过了: 但还是不明白

从我的测试中,参数被传递,就像在中指定它一样

因此,如果有任何一个1可以阐明什么是inout,那将是有帮助的


谢谢

中的
参数仅从调用者传输到被调用者。
out
参数从被调用方传输到调用方。并且,
inout
参数是双向传输的


当您将对象传递给被调用者并被调用者更改对象时,您将使用
inout
参数。

这里是解释AIDL中方向标记的我的版本

  • 它只是一个指示数据流向的方向标记。
    • 中-对象从客户端传输到服务,仅用于 投入
    • 输出-对象从客户端传输到仅使用的服务 关于产出
    • inout-对象从客户端传输到服务 用于输入和输出
  • 所有非基本参数都需要一个方向标记,指示数据的方向。输入、输出或输入

  • 默认情况下,基本体在中为,否则不能为

  • 请注意,来自客户端的RPC调用是同步的
  • 您应该将方向限制在真正需要的范围内,因为编组参数非常昂贵
示例: 请检查下面的AIDL界面,以便更好地理解它

package com.hardian.sample.aidl;
import com.hardian.sample.aidl.TeamMember;

interface ITeamManageService {
void getTeamCaptian(out TeamMember member);
void updateTeamMember(inout TeamMember member, in boolean isLeader);
oneway void removeTeamMember(in TeamMember member);
}
这里我们使用了outininout方向标记来指示数据的方向

  • getTeamCaptian(团队外成员): 去找队长。 此处“out”方向标记表示,当客户端调用此方法时,“member”对象没有相关数据, 但是服务器应该对“member”对象进行更改,因此客户端应该获得更新的“member”对象。 实际上,方法调用是同步的

  • 更新团队成员(inout TeamMember成员,布尔值为IsReader): 更新团队的队长。 这里的“inout”方向标记表示,当客户端调用此方法时,“member”对象中包含相关数据。 服务器应使用输入数据并对其进行处理。一旦流程完成,客户应收回相关数据。 实际上,方法调用是同步的

  • 移除团队成员(在团队成员中) 从团队中删除成员。 此处中的“”方向标记表示“成员”对象从客户端传输到服务,仅用于输入。 如果对服务中的“成员”对象进行了任何更改,那么它将不会反映在客户端中。 方法调用是异步的,我们可以将“单向”关键字放在方法签名中。 异步方法不能有“out”和“inout”参数,它们还必须返回void


  • 另一个有趣的点是,只有当它不是单向AIDL时,才会更改值