我正在编写一个无线电流媒体应用程序。我通过使用AIDL接口技术与服务进行通信,将“无线电播放”作为远程服务运行。但我真的不明白一件事。
AIDL接口参数值中的“out”是什么?
像这样:
String doSomething(in String a, out String[] b);
我理解“in”,即从活动中调用方法时将数据发送到远程。
什么是“out”,为什么我们需要在同一方法中“in”和“out”?在哪种情况下使用它们(“out / inout”)?为什么String[]
“退出”?
请帮助..
答案 0 :(得分:50)
在AIDL中,out
标记指定仅输出参数。换句话说,它是一个参数,不包含有关输入的有趣数据,但在方法期间将填充数据。
例如,可以像这样指定复制字节数组的方法:
void copyArray(in byte[] source, out byte[] dest);
inout
标记表示该参数对输入和输出都有意义。例如:
void charsToUpper(inout char[] chars);
这很重要,因为每个参数的内容必须是marshalled(序列化,传输,接收和反序列化)。输入/输出标签允许Binder跳过编组步骤以获得更好的性能。
答案 1 :(得分:4)
在这里,
所有非原始参数都需要一个方向标记,以指示数据的处理方式。进,出或进出。
原语默认为中,否则不能为其他
示例: 请检查下面的AIDL界面以更好地了解它。
grid.setStyle("-fx-background-color: red;");
在这里,我们已使用 out , in , inout 方向标记来指示数据的处理方式。
getTeamCaptian(TeamMember成员): 获取球队的队长。 这里的“ out ”方向标记表示,当客户调用此方法时,“成员”对象没有相关数据, 但是服务器应更改“成员”对象,因此客户端应获取更新的“成员”对象。 实际上,方法调用是同步。
updateTeamMember(inout TeamMember成员,以boolean isLeader为单位): 更新团队人数。 这里的“ inout ”方向标记表示,当客户调用此方法时,“成员”对象中包含相关数据。 服务器应使用输入数据并进行处理。一旦过程完成,客户应取回相关数据。 实际上,方法调用是同步。
删除TeamMember(在TeamMember成员中) 从团队中删除一个成员。 这里的“ 输入”方向标记表示“成员”对象从客户端转移到仅用于输入的服务。 如果对服务中的“成员”对象进行了任何更改,则该对象将不会反映在客户端中。 方法调用是异步,我们可以将“ oneway ”关键字添加到方法签名中。 异步方法必须没有“ out”和“ inout”参数,它们还必须返回void。