我想知道AIDL中的inout参数是什么?
我知道这是为了什么,有什么用。 (out不会封锁传递的物体)。
但我不明白是什么意思。
我看过: "In/out/inout" in a AIDL interface parameter value? 问题,但仍然不明白。
从我的测试中传递参数就像在。中指定它一样。
因此,如果任何一个人能够了解其内容,那将会有所帮助。
由于
答案 0 :(得分:4)
in
参数仅从呼叫者传输到被呼叫者。 out
参数从被叫方传输到调用方。并且inout
参数都是双向传输的。
将对象传递给被调用者并且被调用者更改它时,您将使用inout
参数。
答案 1 :(得分:0)
这里是我在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(TeamMember成员): 获取球队的队长。 这里的“ out ”方向标记表示,当客户调用此方法时,“成员”对象没有相关数据, 但是服务器应更改“成员”对象,因此客户端应获取更新的“成员”对象。 实际上,方法调用是同步。
updateTeamMember(inout TeamMember成员,以boolean isLeader为单位): 更新团队人数。 这里的“ inout ”方向标记表示,当客户调用此方法时,“成员”对象中包含相关数据。 服务器应使用输入数据并进行处理。一旦过程完成,客户应取回相关数据。 实际上,方法调用是同步。
删除TeamMember(在TeamMember成员中) 从团队中删除一个成员。 这里的“ 输入”方向标记表示“成员”对象从客户端转移到仅用于输入的服务。 如果对服务中的“成员”对象进行了任何更改,则该对象将不会反映在客户端中。 方法调用是异步,我们可以将“ oneway ”关键字添加到方法签名中。 异步方法必须没有“ out”和“ inout”参数,它们还必须返回void。