Android AIDL inout参数
我想知道AIDL中的inout参数是干什么用的 我知道该做什么,该做什么。(out不会封送传递的对象) 但我不明白这是为什么 我已经看过了: 但还是不明白 从我的测试中,参数被传递,就像在中指定它一样 因此,如果有任何一个1可以阐明什么是inout,那将是有帮助的Android AIDL inout参数,android,aidl,Android,Aidl,我想知道AIDL中的inout参数是干什么用的 我知道该做什么,该做什么。(out不会封送传递的对象) 但我不明白这是为什么 我已经看过了: 但还是不明白 从我的测试中,参数被传递,就像在中指定它一样 因此,如果有任何一个1可以阐明什么是inout,那将是有帮助的 谢谢中的参数仅从调用者传输到被调用者。out参数从被调用方传输到调用方。并且,inout参数是双向传输的 当您将对象传递给被调用者并被调用者更改对象时,您将使用inout参数。这里是解释AIDL中方向标记的我的版本 它只是一个指示数
谢谢中的
参数仅从调用者传输到被调用者。out
参数从被调用方传输到调用方。并且,inout
参数是双向传输的
当您将对象传递给被调用者并被调用者更改对象时,您将使用inout
参数。这里是解释AIDL中方向标记的我的版本
- 它只是一个指示数据流向的方向标记。
- 在中-对象从客户端传输到服务,仅用于
投入
- 输出-对象从客户端传输到仅使用的服务
关于产出李>
- inout-对象从客户端传输到服务
用于输入和输出
- 所有非基本参数都需要一个方向标记,指示数据的方向。输入、输出或输入
- 默认情况下,基本体在中为,否则不能为
- 请注意,来自客户端的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);
}
这里我们使用了out、in、inout方向标记来指示数据的方向
getTeamCaptian(团队外成员):
去找队长。
此处“out”方向标记表示,当客户端调用此方法时,“member”对象没有相关数据,
但是服务器应该对“member”对象进行更改,因此客户端应该获得更新的“member”对象。
实际上,方法调用是同步的
更新团队成员(inout TeamMember成员,布尔值为IsReader):
更新团队的队长。
这里的“inout”方向标记表示,当客户端调用此方法时,“member”对象中包含相关数据。
服务器应使用输入数据并对其进行处理。一旦流程完成,客户应收回相关数据。
实际上,方法调用是同步的
移除团队成员(在团队成员中)
从团队中删除成员。
此处中的“”方向标记表示“成员”对象从客户端传输到服务,仅用于输入。
如果对服务中的“成员”对象进行了任何更改,那么它将不会反映在客户端中。
方法调用是异步的,我们可以将“单向”关键字放在方法签名中。
异步方法不能有“out”和“inout”参数,它们还必须返回void
另一个有趣的点是,只有当它不是单向AIDL时,才会更改值