The*_*san 34 android interface aidl
我正在编写一个无线电流媒体应用程序.我通过使用AIDL接口技术与服务进行通信,将"无线电播放"作为远程服务运行.但我真的不明白一件事.
AIDL接口参数值中的"out"是什么?
像这样:
String doSomething(in String a, out String[] b);
Run Code Online (Sandbox Code Playgroud)
我理解"在"中,即从活动调用方法时将数据发送到远程.
什么是"out",为什么我们需要在同一方法中"in"和"out"?在哪种情况下使用它们("out/inout")?为什么String[]"出局"?
请帮忙..
gla*_*ded 51
在AIDL中,out标记指定仅输出参数.换句话说,它是一个参数,不包含有关输入的有趣数据,但在方法期间将填充数据.
例如,可以像这样指定复制字节数组的方法:
void copyArray(in byte[] source, out byte[] dest);
Run Code Online (Sandbox Code Playgroud)
该inout标记表明该参数对输入和输出的意思.例如:
void charsToUpper(inout char[] chars);
Run Code Online (Sandbox Code Playgroud)
这很重要,因为必须对每个参数的内容进行编组(序列化,传输,接收和反序列化).输入/输出标签允许Binder跳过编组步骤以获得更好的性能.
来了,
所有非原始参数都需要一个指示数据去向的方向标签。无论是输入、输出还是输入。
原语在默认情况下,不能在其他情况下
示例:请查看下面的 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);
}
Run Code Online (Sandbox Code Playgroud)
这里我们使用了 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。
| 归档时间: |
|
| 查看次数: |
16684 次 |
| 最近记录: |