鸿蒙OS RemoteObject
RemoteObject
java.lang.Object
|---ohos.rpc.RemoteObject
public class RemoteObject
extends Object
implements IRemoteObject
实现远程对象。
服务提供者必须继承这个类。
如果 RemoteObject 定义为匿名类、本地类或成员类而不是静态单例类,则可能会发生潜在泄漏。
嵌套类摘要
从接口 ohos.rpc.IRemoteObject 继承的嵌套类/接口 |
---|
IRemoteObject.DeathRecipient |
字段摘要
从接口 ohos.rpc.IRemoteObject 继承的字段 |
---|
DUMP_TRANSACTION, INTERFACE_TRANSACTION, MAX_TRANSACTION_ID, MIN_TRANSACTION_ID, PING_TRANSACTION |
构造函数摘要
构造函数 | 描述 |
---|---|
RemoteObject(String descriptor) | 用于使用默认接口描述符创建 RemoteObject 实例的构造函数。 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
boolean | addDeathRecipient(IRemoteObject.DeathRecipient recipient, int flags) | 注册一个用于接收远程代理死亡通知的回调。 |
void | attachLocalInterface(IRemoteBroker localInterface, String descriptor) | 修改当前 RemoteObject 的描述。 |
protected void | dump(FileDescriptor fd, PrintWriter pw, String[] args) | 将当前接口的状态转储到具有特定描述符的文件中。 |
void | dump(FileDescriptor fd, String[] args) | 将当前接口的状态转储到具有特定描述符的文件中。 |
protected void | finalize() | 当垃圾收集确定不再有对该对象的引用时,由对象上的垃圾收集器调用。 |
int | getCallingPid() | 获取 RemoteProxy 对象的 PID。 |
int | getCallingUid() | 获取 RemoteProxy 对象的 UID。 |
String | getInterfaceDescriptor() | 查询接口描述符。 |
boolean | isObjectDead() | 检查 RemoteObject 是否已失效。 |
boolean | onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) | 设置接收请求的条目。 |
IRemoteBroker | queryLocalInterface(String descriptor) | 使用接口描述符查询远程对象。 |
boolean | removeDeathRecipient(IRemoteObject.DeathRecipient recipient, int flags) | 取消注册用于接收远程代理死亡通知的回调。 |
boolean | sendRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) | 向 peer 对象发送请求。 |
protected void | slowPathDump(FileDescriptor fd, PrintWriter pw, String[] args) | 使用给定的 PrintWriter 对象将数据异步转储到指定文件。 |
void | slowPathDump(FileDescriptor fd, String[] args) | 将数据异步转储到指定文件。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造函数详细信息
RemoteObject
public RemoteObject(String descriptor)
用于使用默认接口描述符创建 RemoteObject 实例的构造函数。
参数:
参数名称 | 参数描述 |
---|---|
descriptor | 指示用于创建 RemoteObject 实例的接口描述符。 |
方法详情
queryLocalInterface
public IRemoteBroker queryLocalInterface(String descriptor)
使用接口描述符查询远程对象。
指定者:
接口 IRemoteObject 中的 queryLocalInterface
参数:
参数名称 | 参数描述 |
---|---|
descriptor | 表示用于查询远程对象的接口描述符。 |
返回:
返回与接口描述符匹配的远程对象; 如果没有找到这样的远程对象,则返回 null。
addDeathRecipient
public boolean addDeathRecipient(IRemoteObject.DeathRecipient recipient, int flags)
注册一个用于接收远程代理死亡通知的回调。
指定者:
接口 IRemoteObject 中的 addDeathRecipient
参数:
参数名称 | 参数描述 |
---|---|
recipient | 表示要注册的回调。 |
flags | 表示死亡通知的标志。 |
返回:
返回 false,因为不需要此回调。
removeDeathRecipient
public boolean removeDeathRecipient(IRemoteObject.DeathRecipient recipient, int flags)
取消注册用于接收远程代理死亡通知的回调。
指定者:
接口 IRemoteObject 中的 removeDeathRecipient
参数:
参数名称 | 参数描述 |
---|---|
recipient | 指示要注销的回调。 |
flags | 表示死亡通知的标志。 |
返回:
返回 false,因为不需要此回调。
getInterfaceDescriptor
public String getInterfaceDescriptor()
查询接口描述符。
指定者:
接口 IRemoteObject 中的 getInterfaceDescriptor
返回:
返回接口描述符。
onRemoteRequest
public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) throws RemoteException
设置接收请求的条目。
该方法由远程服务提供者实现。 使用 IPC 时,您需要使用自己的服务逻辑覆盖此方法。
参数:
参数名称 | 参数描述 |
---|---|
code | 表示对端发送的服务请求码。 |
data | 表示对端发送的MessageParcel 对象。 |
reply | 表示远程服务发送的响应消息对象。 本地服务将响应数据写入 MessageParcel 对象。 |
option | 指示操作是同步的还是异步的。 |
返回:
如果操作成功,则返回 true; 否则返回 false。
Throws:
Throw名称 | Throw描述 |
---|---|
RemoteException | 如果发生远程服务错误,则抛出此异常。 |
sendRequest
public boolean sendRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) throws RemoteException
向 peer 对象发送请求。
如果对等对象和 RemoteObject 在同一设备上,则请求由 IPC 驱动程序发送。 如果它们在不同的设备上,则请求由套接字驱动程序发送。
指定者:
接口 IRemoteObject 中的 sendRequest
参数:
参数名称 | 参数描述 |
---|---|
code | 表示请求的消息代码。 |
data | 表示存储待发送数据的MessageParcel 对象。 |
reply | 指示接收响应数据的 MessageParcel 对象。 |
option | 指示同步(默认)或异步请求。 |
返回:
如果操作成功,则返回 true; 否则返回 false。
Throws:
Throw名称 | Throw描述 |
---|---|
RemoteException | 如果发生远程服务错误,则抛出此异常。 |
getCallingPid
public int getCallingPid()
获取 RemoteProxy 对象的 PID。
返回:
返回 RemoteProxy 对象的 PID。
getCallingUid
public int getCallingUid()
获取 RemoteProxy 对象的 UID。
返回:
返回 RemoteProxy 对象的 UID。
dump
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args)
将当前接口的状态转储到具有特定描述符的文件中。
参数:
参数名称 | 参数描述 |
---|---|
fd | 表示目标文件的描述符。 |
pw | 将对象的格式化表示打印到输出流。 |
args | 以字符串形式表示该方法的参数。 |
Throws:
Throw名称 | Throw描述 |
---|---|
RemoteException | 如果打开 FileOutputStream 或将数据写入 FileOutputStream 时发生错误,则抛出此异常。 |
slowPathDump
protected void slowPathDump(FileDescriptor fd, PrintWriter pw, String[] args)
使用给定的 PrintWriter 对象将数据异步转储到指定文件。
此方法仅适用于同一设备上的数据转储。
您需要重写此方法以定义要转储到文件的数据。 转储完成后,您需要关闭文件描述符。
参数:
参数名称 | 参数描述 |
---|---|
fd | 表示目标文件的文件描述符。 |
pw | 指示用于将数据转储到目标文件的 PrintWriter 对象,禁用自动刷新。 |
args | 指示要转储的参数(字符串数组)。 |
dump
public void dump(FileDescriptor fd, String[] args) throws RemoteException
将当前接口的状态转储到具有特定描述符的文件中。
指定者:
在接口 IRemoteObject 中转储
参数:
参数名称 | 参数描述 |
---|---|
fd | 表示目标文件的描述符。 |
args | 以字符串形式表示该方法的参数。 |
Throws:
Throw名称 | Throw描述 |
---|---|
RemoteException | 如果打开 FileOutputStream 或将数据写入 FileOutputStream 时发生错误,则抛出此异常。 |
slowPathDump
public void slowPathDump(FileDescriptor fd, String[] args) throws RemoteException
将数据异步转储到指定文件。
此方法仅适用于同一设备上的数据转储。
或者,您可以覆盖 [slowPathDump(java.io.FileDescriptor,java.io.PrintWriter,java.lang.String]) 方法来定义要转储到文件的数据。 转储完成后,您需要关闭文件描述符。
指定者:
接口 IRemoteObject 中的 slowPathDump
参数:
参数名称 | 参数描述 |
---|---|
fd | 表示目标文件的文件描述符。 |
args | 指示要转储的参数(字符串数组)。 |
Throws:
Throw名称 | Throw描述 |
---|---|
RemoteException | 如果转储命令发送失败或转储过程中发生错误,则抛出此异常。 |
finalize
protected void finalize() throws Throwable
从类复制的描述:对象
当垃圾收集确定不再有对该对象的引用时,由对象上的垃圾收集器调用。子类覆盖 finalize 方法以释放系统资源或执行其他清理。
finalize 的一般约定是,当 Java™ 虚拟机确定不再有任何方法可以让任何尚未终止的线程访问此对象时调用它,除非是由于某个操作由准备完成的其他对象或类的完成所采取。 finalize 方法可以采取任何行动,包括使该对象再次可供其他线程使用;然而,finalize 的通常目的是在对象被不可撤销地丢弃之前执行清理操作。例如,代表输入/输出连接的对象的 finalize 方法可能会执行显式 I/O 事务以在对象被永久丢弃之前中断连接。
Object 类的 finalize 方法不执行任何特殊操作;它只是正常返回。 Object 的子类可以覆盖这个定义。
Java 编程语言不保证哪个线程将为任何给定对象调用 finalize 方法。但是,可以保证调用 finalize 的线程在调用 finalize 时不会持有任何用户可见的同步锁。如果 finalize 方法抛出未捕获的异常,则忽略该异常并终止该对象的终结。
在为一个对象调用 finalize 方法之后,不会采取进一步的行动,直到 Java 虚拟机再次确定没有任何方法可以让任何尚未终止的线程访问该对象,包括可能的行动由其他准备完成的对象或类,此时该对象可能被丢弃。
对于任何给定的对象,Java 虚拟机永远不会多次调用 finalize 方法。
finalize 方法抛出的任何异常都会导致该对象的终结被暂停,否则会被忽略。
覆盖:
在类 Object 中完成
Throws:
Throw名称 | Throw描述 |
---|---|
Throwable | 此方法引发的异常 |
isObjectDead
public boolean isObjectDead()
检查 RemoteObject 是否已失效。
指定者:
接口 IRemoteObject 中的 isObjectDead
返回:
默认返回 false。
attachLocalInterface
public void attachLocalInterface(IRemoteBroker localInterface, String descriptor)
修改当前 RemoteObject 的描述。
此方法用于更改在创建 RemoteObject 期间指定的默认描述符。
参数:
参数名称 | 参数描述 |
---|---|
localInterface | 指示要更改其描述符的 RemoteObject。 |
descriptor | 指示 RemoteObject 的新描述符。 |