AIDL inout param

时间:2013-01-20 16:54:41

标签: android aidl

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

我知道这是为了什么,有什么用。 (out不会封锁传递的物体)。

但我不明白是什么意思。

我看过: "In/out/inout" in a AIDL interface parameter value? 问题,但仍然不明白。

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

因此,如果任何一个人能够了解其内容,那将会有所帮助。

由于

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

  • 它只是一个定向标记,指示数据的处理方式。
    • 输入-将对象从客户端转移到仅用于以下目的的服务 输入
    • -将对象从客户端转移到仅用于服务的对象 用于输出。
    • 输入-对象从客户端转移到服务 用于输入和输出。
  • 所有非原始参数都需要一个方向标记,以指示数据的处理方式。进,出或进出。

  • 原语默认为,否则不能为其他

  • 请注意,来自客户端的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);
}

在这里,我们已使用 out in inout 方向标记来指示数据的处理方式。

  1. getTeamCaptian(TeamMember成员): 获取球队的队长。 这里的“ out ”方向标记表示,当客户调用此方法时,“成员”对象没有相关数据, 但是服务器应更改“成员”对象,因此客户端应获取更新的“成员”对象。 实际上,方法调用是同步

  2. updateTeamMember(inout TeamMember成员,以boolean isLeader为单位): 更新团队人数。 这里的“ inout ”方向标记表示,当客户调用此方法时,“成员”对象中包含相关数据。 服务器应使用输入数据并进行处理。一旦过程完成,客户应取回相关数据。 实际上,方法调用是同步

  3. 删除TeamMember(在TeamMember成员中) 从团队中删除一个成员。 这里的“ 输入”方向标记表示“成员”对象从客户端转移到仅用于输入的服务。 如果对服务中的“成员”对象进行了任何更改,则该对象将不会反映在客户端中。 方法调用是异步,我们可以将“ oneway ”关键字添加到方法签名中。 异步方法必须没有“ out”和“ inout”参数,它们还必须返回void。