AIDL inout param

问题描述 投票:1回答:2

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

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

但我不明白是什么输入。

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

从我的测试中,param的传递就像指定它一样。

因此,如果任何一个可以揭示内在的东西它会有所帮助。

谢谢

android aidl
2个回答
4
投票

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

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


0
投票

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

  • 它只是一个方向标记,指示数据的方向。 in-object从客户端转移到仅用于输入的服务 out - 对象从客户端转移到仅用于输出的服务。 inout - 对象从客户端传输到用于输入和输出的服务。
  • 所有非原始参数都需要一个方向标记来指示数据的传输方式。 in 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);
}

在这里,我们使用了in in direction标签来指示数据的传输方式。

  1. getTeamCaptian(TeamMember成员):获得团队的队长。这里的“out”方向标记意味着,当客户端调用此方法时,“member”对象没有相关数据,但服务器应更改“member”对象,因此客户端应获取更新的“member”对象。实际上,方法调用是同步的。
  2. updateTeamMember(inout TeamMember成员,在boolean isLeader中):更新团队的captian。这里“inout”方向标记意味着,当客户端调用此方法时,“member”对象中包含相关数据。服务器应使用输入数据并对其进行处理。一旦完成该过程,客户端将获得相关数据。实际上,方法调用是同步的。
  3. removeTeamMember(在TeamMember成员中)从团队中删除成员。这里“in”方向标记表示“成员”对象从客户端传输到仅用于输入的服务。如果对服务中的“成员”对象进行了任何更改,则它将不会反映在客户端中。方法调用是异步的,我们可以将“oneway”关键字放到方法签名中。异步方法不能有“out”和“inout”参数,它们也必须返回void。
© www.soinside.com 2019 - 2024. All rights reserved.