AIDL接口参数值中的“输入/输出/输入”?

Posted

技术标签:

【中文标题】AIDL接口参数值中的“输入/输出/输入”?【英文标题】:"In/out/inout" in a AIDL interface parameter value? 【发布时间】:2011-06-09 16:05:55 【问题描述】:

我正在编写一个广播流媒体应用程序。我通过使用 AIDL 接口技术与服务通信,将“广播播放”作为远程服务运行。但我真的不明白一件事。

AIDL 接口参数值中的“out”是什么?

像这样:

String doSomething(in String a, out String[] b);

我理解“in”,即从activity调用方法时向远程发送数据。

什么是“out”,为什么我们需要在同一方法中使用“in”和“out”?在哪种情况下使用它们(“out/inout”)?为什么String[]“出局”?

请帮忙..

【问题讨论】:

我认为@gladed 详尽地回答了您的问题。如果你检查他的答案会很好。 【参考方案1】:

来了,

它只是一个指示数据流向的方向标签。 in - 对象从客户端转移到服务,仅用于 输入 out - 对象从客户端转移到仅使用的服务 用于输出。 inout - 对象从客户端转移到服务 用于输入和输出。

所有非原始参数都需要一个方向标签来指示数据的走向。输入、输出或输出。

原语默认是in,否则不能

请注意,来自客户端的 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(退出 TeamMember 成员): 得到球队的队长。 这里的“out”方向标签的意思是,当客户端调用该方法时,“member”对象没有相关数据, 但是服务器应该对“成员”对象进行更改,所以客户端应该得到更新的“成员”对象。 其实方法调用是同步的

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

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

【讨论】:

【参考方案2】:

在AIDL 中,out 标记指定仅输出参数。换句话说,它是一个参数,在输入时不包含任何有趣的数据,但会在方法期间填充数据。

例如,复制字节数组的方法可以这样指定:

void copyArray(in byte[] source, out byte[] dest);

inout 标签表示参数对输入和输出都有意义。例如:

void charsToUpper(inout char[] chars);

这很重要,因为每个参数的内容都必须是marshalled(序列化、传输、接收和反序列化)。输入/输出标签允许 Binder 跳过编组步骤以获得更好的性能。

【讨论】:

AIDL 链接已关闭。正确的是AIDL 你的意思是调用方法时dest对象是“空数组”还是“null”? 一个“out”参数应该接收一个具有未定义内容的非空对象。

以上是关于AIDL接口参数值中的“输入/输出/输入”?的主要内容,如果未能解决你的问题,请参考以下文章

检查多个列在表值参数中具有多个值中的任何一个

Jmeter接口测试参数传递----正则表达式实践

Symfony 3.4 / routing:参数值中的Urlencoded“/”导致与路由不匹配

postman如何进行取返回值中参数

TestNG 参数在值中声明变量问题

使用 3 个值中确定的参数值创建特定数量的代理