首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AIDL inout参数

AIDL inout参数
EN

Stack Overflow用户
提问于 2013-01-21 00:54:41
回答 2查看 1.4K关注 0票数 2

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

我知道什么是进来的,什么是出去的。(out不封送传递的对象)。

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

我已经看过:"In/out/inout" in a AIDL interface parameter value?的问题了,但还是不明白。

根据我的测试,该参数的传递方式非常类似于在中指定它。

因此,如果any1能够阐明什么是输入输出,这将是有帮助的。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-21 00:59:12

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

当您将一个对象传递给被调用者,而被调用者对其进行更改时,您将使用inout参数。

票数 5
EN

Stack Overflow用户

发布于 2019-04-12 22:44:34

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

  • 它只是一个指示数据走向的定向标签。
    • in -对象从客户端传输到服务,仅用于输入
    • out -对象从客户端传输到服务,仅用于输出。
    • inout -对象从客户端传输到用于输入和outputs.

的服务

  • 所有非原语参数都需要一个方向标记来指示数据的去向。in、out或inout.
  • Primitives在缺省情况下都是RPC in,不能是otherwise
  • Please注意,来自客户端的RPC调用是synchronous.的。
  • 您应该将方向限制为真正需要的,因为封送处理参数的开销很大。

示例:请查看下面的AIDL接口,以便更好地理解它。

代码语言:javascript
复制
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);
}

这里我们使用了outinin out方向标签来指示数据的去向。

  1. getTeamCaptian(out TeamMember成员):找到团队的队长。这里的“member out”方向标签是指,当客户端调用这个方法时,“”对象没有相关的数据,但是服务端需要对"member“对象进行修改,所以客户端应该得到更新后的"member”对象。实际上,方法调用是synchronous.
  2. updateTeamMember(inout TeamMember成员,在布尔isLeader中):更新团队的captian。这里的"inout“方向标签是指,当客户端调用此方法时,"member”对象中有相关数据。服务器使用输入数据并对其进行处理。过程完成后,客户端应取回相关数据。实际上,方法调用是从团队中删除成员( synchronous.
  3. removeTeamMember(in TeamMember )。这里的"in“方向标记表示,"member”对象从客户端传输到服务,仅用于输入。如果对服务中的“成员”对象进行了任何更改,那么它将不会反映在客户端中。方法调用是单向的,我们可以在方法签名中加上“ asynchronous,”关键字。异步方法不能有"out“和"inout”参数,它们还必须返回

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14426820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档