HarmonyOS API:@ohos.rpc (RPC通信)

joytrian
发布于 2023-4-7 16:01
浏览
0收藏

版本:v3.1 Beta

@ohos.rpc (RPC通信)

removeDeathRecipient(deprecated)

从API version 9 开始不再维护,建议使用​​unregisterDeathRecipient​​类替代。

removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean

注销用于接收远程对象死亡通知的回调。

系统能力:SystemCapability.Communication.IPC.Core

参数:

参数名

类型

必填

说明

recipient

​DeathRecipient​

要注销的死亡回调。

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

返回值:

类型

说明

​IRemoteObject​

返回系统能力管理者。

示例:

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

​IRemoteObject​

指定的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

​IRemoteObject​

指定的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​

保存待发送数据的 MessageParcel对象。

reply

​MessageParcel​

接收应答数据的MessageParcel对象。

options

​MessageOption​

本次请求的同异步模式,默认同步调用。

返回值:

类型

说明

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​

保存待发送数据的 MessageParcel对象。

reply

​MessageParcel​

接收应答数据的MessageParcel对象。

options

​MessageOption​

本次请求的同异步模式,默认同步调用。

返回值:

类型

说明

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​

保存待发送数据的 MessageSequence对象。

reply

​MessageSequence​

接收应答数据的MessageSequence对象。

options

​MessageOption​

本次请求的同异步模式,默认同步调用。

返回值:

类型

说明

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​

保存待发送数据的 MessageSequence对象。

reply

​MessageSequence​

接收应答数据的MessageSequence对象。

options

​MessageOption​

本次请求的同异步模式,默认同步调用。

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​

保存待发送数据的 MessageParcel对象。

reply

​MessageParcel​

接收应答数据的MessageParcel对象。

options

​MessageOption​

本次请求的同异步模式,默认同步调用。

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​

携带客户端调用参数的MessageParcel对象。

reply

​MessageParcel​

写入结果的MessageParcel对象。

option

​MessageOption​

指示操作是同步还是异步。

返回值:

类型

说明

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​

携带客户端调用参数的MessageSequence对象。

reply

​MessageSequence​

写入结果的MessageSequence对象。

option

​MessageOption​

指示操作是同步还是异步。

返回值:

类型

说明

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);


文章转载自:​​https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/js-apis-rpc-0000001427902704-V3?catalogVersion=V3#ZH-CN_TOPIC_0000001427902704__readfromashmem8deprecated​

已于2023-4-7 16:01:04修改
收藏
回复
举报
回复
    相关推荐