HarmonyOS API:@ohos.rpc (RPC通信)
版本:v3.1 Beta
@ohos.rpc (RPC通信)
removeDeathRecipient(deprecated)
从API version 9 开始不再维护,建议使用unregisterDeathRecipient类替代。
removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean
注销用于接收远程对象死亡通知的回调。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
recipient | 是 | 要注销的死亡回调。 | |
flags | number | 是 | 死亡通知标志。保留参数。设置为0。 |
返回值:
类型 | 说明 |
boolean | 如果回调成功注销,则返回true;否则返回false。 |
示例:
import FA from "@ohos.ability.featureAbility";
let proxy;
let connect = {
onConnect: function(elementName, remoteProxy) {
console.log("RpcClient: js onConnect called.");
proxy = remoteProxy;
},
onDisconnect: function(elementName) {
console.log("RpcClient: onDisconnect");
},
onFailed: function() {
console.log("RpcClient: onFailed");
}
};
let want = {
"bundleName": "com.ohos.server",
"abilityName": "com.ohos.server.MainAbility",
};
FA.connectAbility(want, connect);
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
let deathRecipient = new MyDeathRecipient();
proxy.addDeathRecippient(deathRecipient, 0);
proxy.removeDeathRecipient(deathRecipient, 0);
getDescriptor9+
getDescriptor(): string
获取对象的接口描述符。接口描述符为字符串。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
string | 返回接口描述符。 |
错误码:
以下错误码的详细介绍请参见ohos.rpc错误码
错误码ID | 错误信息 |
1900008 | proxy or remote object is invalid |
1900007 | communication failed |
示例:
import FA from "@ohos.ability.featureAbility";
let proxy;
let connect = {
onConnect: function(elementName, remoteProxy) {
console.log("RpcClient: js onConnect called.");
proxy = remoteProxy;
},
onDisconnect: function(elementName) {
console.log("RpcClient: onDisconnect");
},
onFailed: function() {
console.log("RpcClient: onFailed");
}
};
let want = {
"bundleName": "com.ohos.server",
"abilityName": "com.ohos.server.MainAbility",
};
FA.connectAbility(want, connect);
try {
let descriptor = proxy.getDescriptor();
console.log("RpcClient: descriptor is " + descriptor);
} catch(error) {
console.info("rpc get interface descriptor fail, errorCode " + error.code);
console.info("rpc get interface descriptor fail, errorMessage " + error.message);
}
getInterfaceDescriptor(deprecated)
从API version 9 开始不再维护,建议使用getDescriptor类替代。
getInterfaceDescriptor(): string
查询当前代理对象接口的描述符。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
string | 当前的接口描述符。 |
示例:
import FA from "@ohos.ability.featureAbility";
let proxy;
let connect = {
onConnect: function(elementName, remoteProxy) {
console.log("RpcClient: js onConnect called.");
proxy = remoteProxy;
},
onDisconnect: function(elementName) {
console.log("RpcClient: onDisconnect");
},
onFailed: function() {
console.log("RpcClient: onFailed");
}
};
let want = {
"bundleName": "com.ohos.server",
"abilityName": "com.ohos.server.MainAbility",
};
FA.connectAbility(want, connect);
let descriptor = proxy.getInterfaceDescriptor();
console.log("RpcClient: descriptor is " + descriptor);
isObjectDead
isObjectDead(): boolean
指示对应的RemoteObject是否死亡。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
boolean | 如果对应的RemoteObject已经死亡,返回true,否则返回false。 |
示例:
import FA from "@ohos.ability.featureAbility";
let proxy;
let connect = {
onConnect: function(elementName, remoteProxy) {
console.log("RpcClient: js onConnect called.");
proxy = remoteProxy;
},
onDisconnect: function(elementName) {
console.log("RpcClient: onDisconnect");
},
onFailed: function() {
console.log("RpcClient: onFailed");
}
};
let want = {
"bundleName": "com.ohos.server",
"abilityName": "com.ohos.server.MainAbility",
};
FA.connectAbility(want, connect);
let isDead = proxy.isObjectDead();
console.log("RpcClient: isObjectDead is " + isDead);
MessageOption
公共消息选项(int标志,int等待时间),使用标志中指定的标志构造指定的MessageOption对象。
系统能力:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。
名称 | 值 | 说明 |
TF_SYNC | 0 | 同步调用标识。 |
TF_ASYNC | 1 | 异步调用标识。 |
TF_ACCEPT_FDS | 0x10 | 指示sendMessageRequest9+接口可以返回文件描述符。 |
TF_WAIT_TIME | 8 | 默认等待时间(单位/秒)。 |
constructor9+
constructor(async?: boolean);
MessageOption构造函数。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
syncFlags | number | 否 | 同步调用或异步调用标志。默认同步调用。 |
constructor
constructor(syncFlags?: number, waitTime?: number)
MessageOption构造函数。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
syncFlags | number | 否 | 同步调用或异步调用标志。默认同步调用。 |
waitTime | number | 否 | 调用rpc最长等待时间。默认 TF_WAIT_TIME。 |
isAsync9+
isAsync(): boolean;
获取SendMessageRequest调用中确定同步或是异步的标志。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
boolean | 调用成功返回同步调用或异步调用标志。 |
setAsync9+
setAsync(async: boolean): void;
设置SendMessageRequest调用中确定同步或是异步的标志。
系统能力:SystemCapability.Communication.IPC.Core
getFlags
getFlags(): number
获取同步调用或异步调用标志。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
number | 调用成功返回同步调用或异步调用标志。 |
setFlags
setFlags(flags: number): void
设置同步调用或异步调用标志。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
flags | number | 是 | 同步调用或异步调用标志。 |
getWaitTime
getWaitTime(): number
获取rpc调用的最长等待时间。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
number | rpc最长等待时间。 |
setWaitTime
setWaitTime(waitTime: number): void
设置rpc调用最长等待时间。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
waitTime | number | 是 | rpc调用最长等待时间。 |
IPCSkeleton
用于获取IPC上下文信息,包括获取UID和PID、获取本端和对端设备ID、检查接口调用是否在同一设备上。
getContextObject
static getContextObject(): IRemoteObject
获取系统能力的管理者。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
返回系统能力管理者。 |
示例:
let samgr = rpc.IPCSkeleton.getContextObject();
console.log("RpcServer: getContextObject result: " + samgr);
getCallingPid
static getCallingPid(): number
获取调用者的PID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的PID。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
number | 返回调用者的PID。 |
示例:
class Stub extends rpc.RemoteObject {
onRemoteMessageRequest(code, data, reply, option) {
let callerPid = rpc.IPCSkeleton.getCallingPid();
console.log("RpcServer: getCallingPid result: " + callerPid);
return true;
}
}
getCallingUid
static getCallingUid(): number
获取调用者的UID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的UID。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
number | 返回调用者的UID。 |
示例:
class Stub extends rpc.RemoteObject {
onRemoteMessageRequest(code, data, reply, option) {
let callerUid = rpc.IPCSkeleton.getCallingUid();
console.log("RpcServer: getCallingUid result: " + callerUid);
return true;
}
}
getCallingTokenId8+
static getCallingTokenId(): number;
获取调用者的TokenId,用于被调用方对调用方的身份校验。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
number | 返回调用者的TokenId。 |
示例:
class Stub extends rpc.RemoteObject {
onRemoteMessageRequest(code, data, reply, option) {
let callerTokenId = rpc.IPCSkeleton.getCallingTokenId();
console.log("RpcServer: getCallingTokenId result: " + callerTokenId);
return true;
}
}
getCallingDeviceID
static getCallingDeviceID(): string
获取调用者进程所在的设备ID。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
string | 返回调用者进程所在的设备ID。 |
示例:
class Stub extends rpc.RemoteObject {
onRemoteMessageRequest(code, data, reply, option) {
let callerDeviceID = rpc.IPCSkeleton.getCallingDeviceID();
console.log("RpcServer: callerDeviceID is: " + callerDeviceID);
return true;
}
}
getLocalDeviceID
static getLocalDeviceID(): string
获取本端设备ID。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
string | 返回本地设备的ID。 |
示例:
class Stub extends rpc.RemoteObject {
onRemoteMessageRequest(code, data, reply, option) {
let localDeviceID = rpc.IPCSkeleton.getLocalDeviceID();
console.log("RpcServer: localDeviceID is: " + localDeviceID);
return true;
}
}
isLocalCalling
static isLocalCalling(): boolean
检查当前通信对端是否是本设备的进程。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
boolean | 如果调用是在同一设备上进行的,则返回true,否则返回false。 |
示例:
class Stub extends rpc.RemoteObject {
onRemoteMessageRequest(code, data, reply, option) {
let isLocalCalling = rpc.IPCSkeleton.isLocalCalling();
console.log("RpcServer: isLocalCalling is: " + isLocalCalling);
return true;
}
}
flushCmdBuffer9+
static flushCmdBuffer(object: IRemoteObject): void
将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
object | 是 | 指定的RemoteProxy。 |
示例:
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
}
let remoteObject = new TestRemoteObject("aaa");
try {
rpc.IPCSkeleton.flushCmdBuffer(remoteObject);
} catch(error) {
console.info("proxy set calling identity fail, errorCode " + error.code);
console.info("proxy set calling identity fail, errorMessage " + error.message);
}
flushCommands(deprecated)
从API version 9 开始不再维护,建议使用flushCmdBuffer类替代。
static flushCommands(object: IRemoteObject): number
将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
object | 是 | 指定的RemoteProxy。 |
返回值:
类型 | 说明 |
number | 如果操作成功,返回0;如果输入对象为空或RemoteObject,或者操作失败,返回错误代码。 |
示例:
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
isObjectDead(): boolean {
return false;
}
}
let remoteObject = new TestRemoteObject("aaa");
let ret = rpc.IPCSkeleton.flushCommands(remoteObject);
console.log("RpcServer: flushCommands result: " + ret);
resetCallingIdentity
static resetCallingIdentity(): string
将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
string | 返回包含远程用户的UID和PID的字符串。 |
示例:
class Stub extends rpc.RemoteObject {
onRemoteMessageRequest(code, data, reply, option) {
let callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
console.log("RpcServer: callingIdentity is: " + callingIdentity);
return true;
}
}
restoreCallingIdentity9+
static restoreCallingIdentity(identity: string): void
将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
identity | string | 是 | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 |
示例:
class Stub extends rpc.RemoteObject {
onRemoteMessageRequest(code, data, reply, option) {
let callingIdentity = null;
try {
callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
console.log("RpcServer: callingIdentity is: " + callingIdentity);
} finally {
rpc.IPCSkeleton.restoreCallingIdentity("callingIdentity ");
}
return true;
}
}
setCallingIdentity(deprecated)
从API version 9 开始不再维护,建议使用restoreCallingIdentity类替代。
static setCallingIdentity(identity: string): boolean
将UID和PID恢复为远程用户的UID和PID。它通常在使用resetCallingIdentity后调用,需要resetCallingIdentity返回的远程用户的UID和PID。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
identity | string | 是 | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 |
返回值:
类型 | 说明 |
boolean | 如果操作成功,则返回true;否则返回false。 |
示例:
class Stub extends rpc.RemoteObject {
onRemoteMessageRequest(code, data, reply, option) {
let callingIdentity = null;
try {
callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
console.log("RpcServer: callingIdentity is: " + callingIdentity);
} finally {
let ret = rpc.IPCSkeleton.setCallingIdentity("callingIdentity ");
console.log("RpcServer: setCallingIdentity is: " + ret);
}
return true;
}
}
RemoteObject
实现远程对象。服务提供者必须继承此类。
constructor
constructor(descriptor: string)
RemoteObject构造函数。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
descriptor | string | 是 | 接口描述符。 |
sendRequest(deprecated)
从API version 9 开始不再维护,建议使用sendMessageRequest类替代。
sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
data | 是 | 保存待发送数据的 MessageParcel对象。 | |
reply | 是 | 接收应答数据的MessageParcel对象。 | |
options | 是 | 本次请求的同异步模式,默认同步调用。 |
返回值:
类型 | 说明 |
boolean | 返回一个布尔值,true表示成功,false表示失败。 |
示例:
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
isObjectDead(): boolean {
return false;
}
}
let testRemoteObject = new TestRemoteObject("testObject");
let option = new rpc.MessageOption();
let data = rpc.MessageParcel.create();
let reply = rpc.MessageParcel.create();
data.writeInt(1);
data.writeString("hello");
let ret: boolean = testRemoteObject.sendRequest(1, data, reply, option);
if (ret) {
console.log("sendRequest got result");
let msg = reply.readString();
console.log("RPCTest: reply msg: " + msg);
} else {
console.log("RPCTest: sendRequest failed");
}
console.log("RPCTest: sendRequest ends, reclaim parcel");
data.reclaim();
reply.reclaim();
sendRequest8+(deprecated)
从API version 9 开始不再维护,建议使用sendMessageRequest类替代。
sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise<SendRequestResult>
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
data | 是 | 保存待发送数据的 MessageParcel对象。 | |
reply | 是 | 接收应答数据的MessageParcel对象。 | |
options | 是 | 本次请求的同异步模式,默认同步调用。 |
返回值:
类型 | 说明 |
Promise<SendRequestResult> | 返回一个期约,兑现值是sendRequestResult实例。 |
sendMessageRequest9+
sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise<RequestResult>
以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
data | 是 | 保存待发送数据的 MessageSequence对象。 | |
reply | 是 | 接收应答数据的MessageSequence对象。 | |
options | 是 | 本次请求的同异步模式,默认同步调用。 |
返回值:
类型 | 说明 |
Promise<RequestResult> | 返回一个期约,兑现值是sendRequestResult实例。 |
示例:
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
}
let testRemoteObject = new TestRemoteObject("testObject");
let option = new rpc.MessageOption();
let data = rpc.MessageSequence.create();
let reply = rpc.MessageSequence.create();
data.writeInt(1);
data.writeString("hello");
testRemoteObject.sendMessageRequest(1, data, reply, option)
.then(function(result) {
if (result.errCode === 0) {
console.log("sendMessageRequest got result");
result.reply.readException();
let msg = result.reply.readString();
console.log("RPCTest: reply msg: " + msg);
} else {
console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode);
}
}).catch(function(e) {
console.log("RPCTest: sendMessageRequest got exception: " + e.message);
}).finally (() => {
console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
data.reclaim();
reply.reclaim();
});
sendMessageRequest9+
sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback<RequestResult>): void
以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendMessageRequest返回时收到回调,回复内容在reply报文里。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
data | 是 | 保存待发送数据的 MessageSequence对象。 | |
reply | 是 | 接收应答数据的MessageSequence对象。 | |
options | 是 | 本次请求的同异步模式,默认同步调用。 | |
AsyncCallback | AsyncCallback<RequestResult> | 是 | 接收发送结果的回调。 |
示例:
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
}
function sendRequestCallback(result) {
if (result.errCode === 0) {
console.log("sendRequest got result");
result.reply.readException();
let msg = result.reply.readString();
console.log("RPCTest: reply msg: " + msg);
} else {
console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
}
console.log("RPCTest: sendRequest ends, reclaim parcel");
result.data.reclaim();
result.reply.reclaim();
}
let testRemoteObject = new TestRemoteObject("testObject");
let option = new rpc.MessageOption();
let data = rpc.MessageSequence.create();
let reply = rpc.MessageSequence.create();
data.writeInt(1);
data.writeString("hello");
testRemoteObject.sendMessageRequest(1, data, reply, option, sendRequestCallback);
sendRequest8+(deprecated)
从API version 9 开始不再维护,建议使用sendMessageRequest类替代。
sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback<SendRequestResult>): void
以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 |
data | 是 | 保存待发送数据的 MessageParcel对象。 | |
reply | 是 | 接收应答数据的MessageParcel对象。 | |
options | 是 | 本次请求的同异步模式,默认同步调用。 | |
AsyncCallback | AsyncCallback<SendRequestResult> | 是 | 接收发送结果的回调。 |
示例:
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
isObjectDead(): boolean {
return false;
}
}
function sendRequestCallback(result) {
if (result.errCode === 0) {
console.log("sendRequest got result");
result.reply.readException();
let msg = result.reply.readString();
console.log("RPCTest: reply msg: " + msg);
} else {
console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
}
console.log("RPCTest: sendRequest ends, reclaim parcel");
result.data.reclaim();
result.reply.reclaim();
}
let testRemoteObject = new TestRemoteObject("testObject");
let option = new rpc.MessageOption();
let data = rpc.MessageParcel.create();
let reply = rpc.MessageParcel.create();
data.writeInt(1);
data.writeString("hello");
testRemoteObject.sendRequest(1, data, reply, option, sendRequestCallback);
onRemoteRequest8+(deprecated)
从API version 9 开始不再维护,建议使用onRemoteMessageRequest类替代。
onRemoteRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean
sendMessageRequest请求的响应处理函数,服务端在该函数里处理请求,回复结果。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
code | number | 是 | 对端发送的服务请求码。 |
data | 是 | 携带客户端调用参数的MessageParcel对象。 | |
reply | 是 | 写入结果的MessageParcel对象。 | |
option | 是 | 指示操作是同步还是异步。 |
返回值:
类型 | 说明 |
boolean | 如果操作成功,则返回true;否则返回false。 |
示例:
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
isObjectDead(): boolean {
return false;
}
onRemoteRequest(code, data, reply, option) {
if (code === 1) {
console.log("RpcServer: onRemoteRequest called");
return true;
} else {
console.log("RpcServer: unknown code: " + code);
return false;
}
}
}
onRemoteMessageRequest9+
onRemoteMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): boolean | Promise<boolean>
说明
- 开发者应优先选择重载onRemoteMessageRequest方法,其中可以自由实现同步和异步的消息处理。
- 开发者同时重载onRemoteRequest和onRemoteMessageRequest方法时,仅onRemoteMessageRequest方法生效。
sendMessageRequest请求的响应处理函数,服务端在该函数里同步或异步地处理请求,回复结果。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
code | number | 是 | 对端发送的服务请求码。 |
data | 是 | 携带客户端调用参数的MessageSequence对象。 | |
reply | 是 | 写入结果的MessageSequence对象。 | |
option | 是 | 指示操作是同步还是异步。 |
返回值:
类型 | 说明 |
boolean | 若在onRemoteMessageRequest中同步地处理请求,则返回一个布尔值:操作成功,则返回true;否则返回false。 |
Promise<boolean> | 若在onRemoteMessageRequest中异步地处理请求,则返回一个Promise对象。 |
重载onRemoteMessageRequest方法同步处理请求示例:
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
onRemoteMessageRequest(code, data, reply, option) {
if (code === 1) {
console.log("RpcServer: sync onRemoteMessageRequest is called");
return true;
} else {
console.log("RpcServer: unknown code: " + code);
return false;
}
}
}
重载onRemoteMessageRequest方法异步处理请求示例:
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
async onRemoteMessageRequest(code, data, reply, option) {
if (code === 1) {
console.log("RpcServer: async onRemoteMessageRequest is called");
} else {
console.log("RpcServer: unknown code: " + code);
return false;
}
await new Promise((resolve) => {
setTimeout(resolve, 100);
})
return true;
}
}
同时重载onRemoteMessageRequest和onRemoteRequest方法同步处理请求示例:
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
onRemoteRequest(code, data, reply, option) {
if (code === 1) {
console.log("RpcServer: sync onRemoteMessageRequest is called");
return true;
} else {
console.log("RpcServer: unknown code: " + code);
return false;
}
}
// 同时调用仅会执行onRemoteMessageRequest
onRemoteMessageRequest(code, data, reply, option) {
if (code === 1) {
console.log("RpcServer: async onRemoteMessageRequest is called");
} else {
console.log("RpcServer: unknown code: " + code);
return false;
}
return true;
}
}
同时重载onRemoteMessageRequest和onRemoteRequest方法异步处理请求示例:
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
onRemoteRequest(code, data, reply, option) {
if (code === 1) {
console.log("RpcServer: sync onRemoteRequest is called");
return true;
} else {
console.log("RpcServer: unknown code: " + code);
return false;
}
}
// 同时调用仅会执行onRemoteMessageRequest
async onRemoteMessageRequest(code, data, reply, option) {
if (code === 1) {
console.log("RpcServer: async onRemoteMessageRequest is called");
} else {
console.log("RpcServer: unknown code: " + code);
return false;
}
await new Promise((resolve) => {
setTimeout(resolve, 100);
})
return true;
}
}
getCallingUid
getCallingUid(): number
获取通信对端的进程Uid。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
number | 返回通信对端的进程Uid。 |
示例:
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
}
let testRemoteObject = new TestRemoteObject("testObject");
console.log("RpcServer: getCallingUid: " + testRemoteObject.getCallingUid());
getCallingPid
getCallingPid(): number
获取通信对端的进程Pid。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
number | 返回通信对端的进程Pid。 |
示例:
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
}
let testRemoteObject = new TestRemoteObject("testObject");
console.log("RpcServer: getCallingPid: " + testRemoteObject.getCallingPid());
getLocalInterface9+
getLocalInterface(descriptor: string): IRemoteBroker
查询接口。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
descriptor | string | 是 | 接口描述符的字符串。 |
返回值:
类型 | 说明 |
IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 |
示例:
class MyDeathRecipient {onRemoteDied() console.log("server died"); }}class TestRemoteObject extends rpc.RemoteObject {constructor(descriptor) super(descriptor); }registerDeathRecipient(recipient: MyDeathRecipient, flags: number){ // 方法逻辑需开发者根据需求自行实现 }unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number){ // 方法逻辑需开发者根据需求自行实现 } isObjectDead(): boolean { return false; }}let testRemoteObject = new TestRemoteObject("testObject");try { let broker = testRemoteObject.getLocalInterface("testObject");} catch(error) { console.info(" rpc get local interface fail, errorCode " + error.code); console.info(" rpc get local interface fail, errorMessage " + error.message);}
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
registerDeathRecipient(recipient: MyDeathRecipient, flags: number){
// 方法逻辑需开发者根据需求自行实现
}
unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number){
// 方法逻辑需开发者根据需求自行实现
}
isObjectDead(): boolean {
return false;
}
}
let testRemoteObject = new TestRemoteObject("testObject");
try {
let broker = testRemoteObject.getLocalInterface("testObject");
} catch(error) {
console.info(" rpc get local interface fail, errorCode " + error.code);
console.info(" rpc get local interface fail, errorMessage " + error.message);
}
queryLocalInterface(deprecated)
从API version 9 开始不再维护,建议使用getLocalInterface类替代。
queryLocalInterface(descriptor: string): IRemoteBroker
查询并获取当前接口描述符对应的远端对象是否已经存在。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
descriptor | string | 是 | 需要查询的接口描述符。 |
返回值:
类型 | 说明 |
IRemoteBroker | 如果接口描述符对应的远端对象存在,则返回该远端对象,否则返回Null。 |
示例:
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
isObjectDead(): boolean {
return false;
}
}
let testRemoteObject = new TestRemoteObject("testObject");
let broker = testRemoteObject.queryLocalInterface("testObject");
getDescriptor9+
getDescriptor(): string
获取对象的接口描述符。接口描述符为字符串。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
string | 返回接口描述符。 |
错误码:
以下错误码的详细介绍请参见ohos.rpc错误码
错误码ID | 错误信息 |
1900008 | proxy or remote object is invalid |
示例:
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
// 方法逻辑需开发者根据需求自行实现
}
unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
// 方法逻辑需开发者根据需求自行实现
}
isObjectDead(): boolean {
return false;
}
}
let testRemoteObject = new TestRemoteObject("testObject");
try {
let descriptor = testRemoteObject.getDescriptor();
} catch(error) {
console.info(" rpc get local interface fail, errorCode " + error.code);
console.info(" rpc get local interface fail, errorMessage " + error.message);
}
console.log("RpcServer: descriptor is: " + descriptor);
getInterfaceDescriptor(deprecated)
从API version 9 开始不再维护,建议使用getDescriptor类替代。
getInterfaceDescriptor(): string
查询接口描述符。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
string | 返回接口描述符。 |
示例:
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
}
addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
isObjectDead(): boolean {
return false;
}
}
let testRemoteObject = new TestRemoteObject("testObject");
let descriptor = testRemoteObject.getInterfaceDescriptor();
console.log("RpcServer: descriptor is: " + descriptor);
modifyLocalInterface9+
modifyLocalInterface(localInterface: IRemoteBroker, descriptor: string): void
此接口用于把接口描述符和IRemoteBroker对象绑定。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
localInterface | IRemoteBroker | 是 | 将与描述符绑定的IRemoteBroker对象。 |
descriptor | string | 是 | 用于与IRemoteBroker对象绑定的描述符。 |
示例:
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
try {
this.modifyLocalInterface(this, descriptor);
} catch(error) {
console.info(rpc attach local interface fail, errorCode " + error.code);
console.info(rpc attach local interface fail, errorMessage " + error.message);
}
}
registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
// 方法逻辑需开发者根据需求自行实现
}
unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
// 方法逻辑需开发者根据需求自行实现
}
isObjectDead(): boolean {
return false;
}
asObject(): rpc.IRemoteObject {
return this;
}
}
let testRemoteObject = new TestRemoteObject("testObject");
attachLocalInterface(deprecated)
从API version 9 开始不再维护,建议使用modifyLocalInterface类替代。
attachLocalInterface(localInterface: IRemoteBroker, descriptor: string): void
此接口用于把接口描述符和IRemoteBroker对象绑定。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
localInterface | IRemoteBroker | 是 | 将与描述符绑定的IRemoteBroker对象。 |
descriptor | string | 是 | 用于与IRemoteBroker对象绑定的描述符。 |
示例:
class MyDeathRecipient {
onRemoteDied() {
console.log("server died");
}
}
class TestRemoteObject extends rpc.RemoteObject {
constructor(descriptor) {
super(descriptor);
this.attachLocalInterface(this, descriptor);
}
addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
return true;
}
isObjectDead(): boolean {
return false;
}
asObject(): rpc.IRemoteObject {
return this;
}
}
let testRemoteObject = new TestRemoteObject("testObject");
Ashmem8+
提供与匿名共享内存对象相关的方法,包括创建、关闭、映射和取消映射Ashmem、从Ashmem读取数据和写入数据、获取Ashmem大小、设置Ashmem保护。
映射内存保护类型:
系统能力:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。
名称 | 值 | 说明 |
PROT_EXEC | 4 | 映射的内存可执行 |
PROT_NONE | 0 | 映射的内存不可访问 |
PROT_READ | 1 | 映射的内存可读 |
PROT_WRITE | 2 | 映射的内存可写 |
create9+
static create(name: string, size: number): Ashmem
根据指定的名称和大小创建Ashmem对象。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
name | string | 是 | 名称,用于查询Ashmem信息。 |
size | number | 是 | Ashmem的大小,以字节为单位。 |
返回值:
类型 | 说明 |
Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 |
示例:
let ashmem;
try {
ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
} catch(error) {
console.info("Rpc creat ashmem fail, errorCode " + error.code);
console.info("Rpc creat ashmem fail, errorMessage " + error.message);
}
let size = ashmem.getAshmemSize();
console.log("RpcTest: get ashemm by create : " + ashmem + " size is : " + size);
createAshmem8+(deprecated)
从API version 9 开始不再维护,建议使用create类替代。
static createAshmem(name: string, size: number): Ashmem
根据指定的名称和大小创建Ashmem对象。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
name | string | 是 | 名称,用于查询Ashmem信息。 |
size | number | 是 | Ashmem的大小,以字节为单位。 |
返回值:
类型 | 说明 |
Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 |
示例:
let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
let size = ashmem.getAshmemSize();
console.log("RpcTest: get ashemm by createAshmem : " + ashmem + " size is : " + size);
create9+
static create(ashmem: Ashmem): Ashmem
通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
ashmem | Ashmem | 是 | 已存在的Ashmem对象。 |
返回值:
类型 | 说明 |
Ashmem | 返回创建的Ashmem对象。 |
示例:
let ashmem2;
try {
let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
let ashmem2 = rpc.Ashmem.create(ashmem);
} catch(error) {
console.info("Rpc creat ashmem from existing fail, errorCode " + error.code);
console.info("Rpc creat ashmem from existing fail, errorMessage " + error.message);
}
let size = ashmem2.getAshmemSize();
console.log("RpcTest: get ashemm by create : " + ashmem2 + " size is : " + size);
createAshmemFromExisting8+(deprecated)
从API version 9 开始不再维护,建议使用create类替代。
static createAshmemFromExisting(ashmem: Ashmem): Ashmem
通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
ashmem | Ashmem | 是 | 已存在的Ashmem对象。 |
返回值:
类型 | 说明 |
Ashmem | 返回创建的Ashmem对象。 |
示例:
let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
let ashmem2 = rpc.Ashmem.createAshmemFromExisting(ashmem);
let size = ashmem2.getAshmemSize();
console.log("RpcTest: get ashemm by createAshmemFromExisting : " + ashmem2 + " size is : " + size);
closeAshmem8+
closeAshmem(): void
关闭这个Ashmem。
系统能力:SystemCapability.Communication.IPC.Core
示例:
let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
ashmem.closeAshmem();
unmapAshmem8+
unmapAshmem(): void
删除该Ashmem对象的地址映射。
系统能力:SystemCapability.Communication.IPC.Core
示例:
let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
ashmem.unmapAshmem();
getAshmemSize8+
getAshmemSize(): number
获取Ashmem对象的内存大小。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
number | 返回Ashmem对象的内存大小。 |
示例:
let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
let size = ashmem.getAshmemSize();
console.log("RpcTest: get ashmem is " + ashmem + " size is : " + size);
mapTypedAshmem9+
mapTypedAshmem(mapType: number): void
在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
mapType | number | 是 | 指定映射的内存区域的保护等级。 |
错误码:
以下错误码的详细介绍请参见ohos.rpc错误码
错误码ID | 错误信息 |
1900001 | call mmap function failed |
示例:
let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
try {
ashmem.mapTypedAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
} catch(error) {
console.info("Rpc map ashmem fail, errorCode " + error.code);
console.info("Rpc map ashmem fail, errorMessage " + error.message);
}
mapAshmem8+(deprecated)
从API version 9 开始不再维护,建议使用mapTypedAshmem类替代。
mapAshmem(mapType: number): boolean
在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
mapType | number | 是 | 指定映射的内存区域的保护等级。 |
返回值:
类型 | 说明 |
boolean | 如果映射成功,则返回true;否则返回false。 |
示例:
let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
let mapReadAndWrite = ashmem.mapAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
console.log("RpcTest: map ashmem result is : " + mapReadAndWrite);
mapReadWriteAshmem9+
mapReadWriteAshmem(): void
在此进程虚拟地址空间上创建可读写的共享文件映射。
系统能力:SystemCapability.Communication.IPC.Core
错误码:
以下错误码的详细介绍请参见ohos.rpc错误码
错误码ID | 错误信息 |
1900001 | call mmap function failed |
示例:
let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
try {
ashmem.mapReadWriteAshmem();
} catch(error) {
console.info("Rpc map read and write ashmem fail, errorCode " + error.code);
console.info("Rpc map read and write ashmem fail, errorMessage " + error.message);
}
mapReadAndWriteAshmem8+(deprecated)
从API version 9 开始不再维护,建议使用mapReadWriteAshmem类替代。
mapReadAndWriteAshmem(): boolean
在此进程虚拟地址空间上创建可读写的共享文件映射。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
boolean | 如果映射成功,则返回true;否则返回false。 |
示例:
let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
let mapResult = ashmem.mapReadAndWriteAshmem();
console.log("RpcTest: map ashmem result is : " + mapResult);
mapReadonlyAshmem9+
mapReadonlyAshmem(): void
在此进程虚拟地址空间上创建只读的共享文件映射。
系统能力:SystemCapability.Communication.IPC.Core
错误码:
以下错误码的详细介绍请参见ohos.rpc错误码
错误码ID | 错误信息 |
1900001 | call mmap function failed |
示例:
let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
try {
ashmem.mapReadonlyAshmem();
} catch(error) {
console.info("Rpc map read and write ashmem fail, errorCode " + error.code);
console.info("Rpc map read and write ashmem fail, errorMessage " + error.message);
}
mapReadOnlyAshmem8+(deprecated)
从API version 9 开始不再维护,建议使用mapReadonlyAshmem类替代。
mapReadOnlyAshmem(): boolean
在此进程虚拟地址空间上创建只读的共享文件映射。
系统能力:SystemCapability.Communication.IPC.Core
返回值:
类型 | 说明 |
boolean | 如果映射成功,则返回true;否则返回false。 |
示例:
let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
let mapResult = ashmem.mapReadOnlyAshmem();
console.log("RpcTest: Ashmem mapReadOnlyAshmem result is : " + mapResult);
setProtectionType9+
setProtectionType(protectionType: number): void
设置映射内存区域的保护等级。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
protectionType | number | 是 | 要设置的保护类型。 |
错误码:
以下错误码的详细介绍请参见ohos.rpc错误码
错误码ID | 错误信息 |
1900002 | call os ioctl function failed |
示例:
let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
try {
ashmem.setProtection(ashmem.PROT_READ);
} catch(error) {
console.info("Rpc set protection type fail, errorCode " + error.code);
console.info("Rpc set protection type fail, errorMessage " + error.message);
}
setProtection8+(deprecated)
从API version 9 开始不再维护,建议使用setProtectionType类替代。
setProtection(protectionType: number): boolean
设置映射内存区域的保护等级。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
protectionType | number | 是 | 要设置的保护类型。 |
返回值:
类型 | 说明 |
boolean | 如果设置成功,则返回true;否则返回false。 |
示例:
let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
let result = ashmem.setProtection(ashmem.PROT_READ);
console.log("RpcTest: Ashmem setProtection result is : " + result);
writeAshmem9+
writeAshmem(buf: number[], size: number, offset: number): void
将数据写入此Ashmem对象关联的共享文件。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
buf | number[] | 是 | 写入Ashmem对象的数据。 |
size | number | 是 | 要写入的数据大小。 |
offset | number | 是 | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 |
错误码:
以下错误码的详细介绍请参见ohos.rpc错误码
错误码ID | 错误信息 |
1900003 | write to ashmem failed |
示例:
let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
ashmem.mapReadWriteAshmem();
var ByteArrayVar = [1, 2, 3, 4, 5];
try {
ashmem.writeAshmem(ByteArrayVar, 5, 0);
} catch(error) {
console.info("Rpc write to ashmem fail, errorCode " + error.code);
console.info("Rpc write to ashmem fail, errorMessage " + error.message);
}
writeToAshmem8+(deprecated)
从API version 9 开始不再维护,建议使用writeAshmem类替代。
writeToAshmem(buf: number[], size: number, offset: number): boolean
将数据写入此Ashmem对象关联的共享文件。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
buf | number[] | 是 | 写入Ashmem对象的数据。 |
size | number | 是 | 要写入的数据大小。 |
offset | number | 是 | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 |
返回值:
类型 | 说明 |
boolean | 如果数据写入成功,则返回true;在其他情况下,如数据写入越界或未获得写入权限,则返回false。 |
示例:
let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
let mapResult = ashmem.mapReadAndWriteAshmem();
console.info("RpcTest map ashmem result is " + mapResult);
var ByteArrayVar = [1, 2, 3, 4, 5];
let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
console.log("RpcTest: write to Ashmem result is : " + writeResult);
readAshmem9+
readAshmem(size: number, offset: number): number[]
从此Ashmem对象关联的共享文件中读取数据。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
size | number | 是 | 要读取的数据的大小。 |
offset | number | 是 | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 |
返回值:
类型 | 说明 |
number[] | 返回读取的数据。 |
错误码:
以下错误码的详细介绍请参见ohos.rpc错误码
错误码ID | 错误信息 |
1900004 | read from ashmem failed |
示例:
let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
ashmem.mapReadWriteAshmem();
var ByteArrayVar = [1, 2, 3, 4, 5];
ashmem.writeAshmem(ByteArrayVar, 5, 0);
try {
let readResult = ashmem.readAshmem(5, 0);
console.log("RpcTest: read from Ashmem result is : " + readResult);
} catch(error) {
console.info("Rpc read from ashmem fail, errorCode " + error.code);
console.info("Rpc read from ashmem fail, errorMessage " + error.message);
}
readFromAshmem8+(deprecated)
从API version 9 开始不再维护,建议使用readAshmem类替代。
readFromAshmem(size: number, offset: number): number[]
从此Ashmem对象关联的共享文件中读取数据。
系统能力:SystemCapability.Communication.IPC.Core
参数:
参数名 | 类型 | 必填 | 说明 |
size | number | 是 | 要读取的数据的大小。 |
offset | number | 是 | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 |
返回值:
类型 | 说明 |
number[] | 返回读取的数据。 |
示例:
let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
let mapResult = ashmem.mapReadAndWriteAshmem();
console.info("RpcTest map ashmem result is " + mapResult);
var ByteArrayVar = [1, 2, 3, 4, 5];
let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
console.log("RpcTest: write to Ashmem result is : " + writeResult);
let readResult = ashmem.readFromAshmem(5, 0);
console.log("RpcTest: read to Ashmem result is : " + readResult);