我想知道 AIDL 中的 inout 参数是干什么用的?
我知道什么是为了什么,什么是为了什么。(out 不会编组传递的对象)。
但我不明白 inout 是做什么用的。
我查看了: AIDL 接口参数值中的“In/out/inout”? 问题,但还是不明白。
根据我的测试,参数的传递很像在中指定它。
因此,如果 any1 可以阐明什么是 inout 会有所帮助。
谢谢
我想知道 AIDL 中的 inout 参数是干什么用的?
我知道什么是为了什么,什么是为了什么。(out 不会编组传递的对象)。
但我不明白 inout 是做什么用的。
我查看了: AIDL 接口参数值中的“In/out/inout”? 问题,但还是不明白。
根据我的测试,参数的传递很像在中指定它。
因此,如果 any1 可以阐明什么是 inout 会有所帮助。
谢谢
in
参数仅从调用者传输到被调用者。参数从out
被调用者传输到调用者。并且inout
参数是双向传输的。
inout
当您将对象传递给被调用者并且被调用者更改它时,您将使用参数。
这是我在 AIDL 中解释定向标签的版本,
所有非原始参数都需要一个方向标签来指示数据的走向。要么进,出,要么进。
默认情况下,基元在,否则不能
示例:请检查下面的 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方向标签来指示数据的走向。
getTeamCaptian(out TeamMember member) : 获取球队队长。这里的“ out ”方向标签的意思是,当客户端调用该方法时,“member”对象没有相关数据,但是服务器要对“member”对象进行修改,所以客户端会得到更新后的“member”对象. 实际上,方法调用是同步的。
updateTeamMember(inout TeamMember member, in boolean isLeader) : 更新团队的队长。这里的“ inout ”方向标签的意思是,当客户端调用这个方法时,“member”对象里面有相关的数据。服务器将使用输入数据并对其进行处理。流程完成后,客户应取回相关数据。实际上,方法调用是同步的。
removeTeamMember(in TeamMember member) 从团队中删除成员。这里的“ in ”方向标签意味着,“成员”对象从客户端传输到服务,仅用于输入。如果对服务中的“成员”对象进行了任何更改,那么它将不会反映在客户端中。方法调用是异步的,我们可以在方法签名中加上“ oneway ”关键字。异步方法不能有“out”和“inout”参数,它们也必须返回 void。