2

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

我知道什么是为了什么,什么是为了什么。(out 不会编组传递的对象)。

但我不明白 inout 是做什么用的。

我查看了: AIDL 接口参数值中的“In/out/inout”? 问题,但还是不明白。

根据我的测试,参数的传递很像在中指定它。

因此,如果 any1 可以阐明什么是 inout 会有所帮助。

谢谢

4

2 回答 2

5

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

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

于 2013-01-20T16:59:11.710 回答
0

这是我在 AIDL 中解释定向标签的版本,

  • 它只是一个指示数据流向的方向标签。
    • in - 对象从客户端传输到仅用于输入的服务
    • out - 对象从客户端传输到仅用于输出的服务。
    • 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方向标签来指示数据的走向。

  1. getTeamCaptian(out TeamMember member) : 获取球队队长。这里的“ out ”方向标签的意思是,当客户端调用该方法时,“member”对象没有相关数据,但是服务器要对“member”对象进行修改,所以客户端会得到更新后的“member”对象. 实际上,方法调用是同步的。

  2. updateTeamMember(inout TeamMember member, in boolean isLeader) : 更新团队的队长。这里的“ inout ”方向标签的意思是,当客户端调用这个方法时,“member”对象里面有相关的数据。服务器将使用输入数据并对其进行处理。流程完成后,客户应取回相关数据。实际上,方法调用是同步的。

  3. removeTeamMember(in TeamMember member) 从团队中删除成员。这里的“ in ”方向标签意味着,“成员”对象从客户端传输到服务,仅用于输入。如果对服务中的“成员”对象进行了任何更改,那么它将不会反映在客户端中。方法调用是异步的,我们可以在方法签名中加上“ oneway ”关键字。异步方法不能有“out”和“inout”参数,它们也必须返回 void。

于 2019-04-12T14:44:34.360 回答