【问题标题】:"In/out/inout" in a AIDL interface parameter value?AIDL接口参数值中的“输入/输出/输入”?
【发布时间】: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 详尽地回答了您的问题。如果你检查他的答案会很好。

标签: android interface aidl


【解决方案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方向标签来指示数据的走向。

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

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

  3. 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”参数应该接收一个具有未定义内容的非空对象。
    猜你喜欢
    • 2013-01-03
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多