鸿蒙OS Ashmem
Ashmem
java.lang.Object
|---ohos.utils.Ashmem
public class Ashmem
extends Object
提供与匿名共享内存(Ashmem)相关的方法,包括创建、关闭、映射和取消映射Ashmem,从Ashmem读取数据和向Ashmem写入数据,获取Ashmem大小,为Ashmem设置保护。
Ashmem 是由一个进程创建的。 您可以将创建的 Ashmem 对象映射到当前进程以读取和写入数据。 或者,您可以将此 Ashmem 对象传输并映射到另一个进程以进行数据读取和写入。 您需要确保多个进程之间并发读写操作的时序。
字段摘要
修饰符和类型 | 字段 | 描述 |
---|---|---|
static int | PROT_EXEC | 表示可以执行 Ashmem 对象中的数据。 |
static int | PROT_NONE | 表示 Ashmem 对象中的数据无法读取、写入或执行。 |
static int | PROT_READ | 表示可以读取 Ashmem 对象中的数据。 |
static int | PROT_WRITE | 表示可以写入 Ashmem 对象中的数据。 |
构造函数摘要
构造函数 | 描述 |
---|---|
Ashmem(long nativeObject) |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
void | closeAshmem() | 关闭此 Ashmem。 |
static Ashmem | createAshmem(String name, int size) | 根据指定的调试名称和内存大小创建 Ashmem 对象。 |
static Ashmem | createAshmemFromExisting(long unwrappedNativeObject) | 通过复制现有的 Ashmem 对象来创建 Ashmem 对象。 |
protected void | finalize() | 当垃圾收集确定不再有对该对象的引用时,由对象上的垃圾收集器调用。 |
long | getAshmemIdentity() | 获取 Ashmem 对象的身份。 |
int | getAShmemSize() | 获取 Ashmem 对象的内存大小。 |
boolean | mapAshmem(int mapType) | 使用指定的映射类型将 Ashmem 对象映射到此进程。 |
boolean | mapReadAndWriteAShmem() | 在 Ashmem 对象和此进程之间创建读/写映射。 |
boolean | mapReadOnlyAShmem() | 在 Ashmem 对象和此进程之间创建只读映射。 |
byte[] | readFromAShmem(int size, int offset) | 从 Ashmem 对象中读取数据。 |
boolean | setProtection(int protectionType) | 设置 Ashmem 对象的保护类型。 |
void | unmapAShmem() | 从此进程中取消映射 Ashmem 对象。 |
boolean | writeToAShmem(byte[] data, int size, int offset) | 将数据写入 Ashmem 对象。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息
PROT_EXEC
public static final int PROT_EXEC
表示可以执行 Ashmem 对象中的数据。
它可用于设置 Ashmem 对象的保护或映射类型。
PROT_NONE
public static final int PROT_NONE
表示 Ashmem 对象中的数据无法读取、写入或执行。
它可用于设置 Ashmem 对象的保护或映射类型。
PROT_READ
public static final int PROT_READ
表示可以读取 Ashmem 对象中的数据。
它可用于设置 Ashmem 对象的保护或映射类型。
PROT_WRITE
public static final int PROT_WRITE
表示可以写入 Ashmem 对象中的数据。
它可用于设置 Ashmem 对象的保护或映射类型。
构造函数详细信息
Ashmem
public Ashmem(long nativeObject)
方法详情
createAshmem
public static Ashmem createAshmem(String name, int size)
根据指定的调试名称和内存大小创建 Ashmem 对象。
调试名称仅用于在检查已映射到此 Ashmem 的进程的内存映射时查询有关此 Ashmem 的信息。
参数:
参数名称 | 参数描述 |
---|---|
name | 调试名称,方便查询Ashmem信息。 |
size | 指示 Ashmem 的大小。 |
返回:
返回创建的 Ashmem 对象; 如果创建失败则返回 null。
createAshmemFromExisting
public static Ashmem createAshmemFromExisting(long unwrappedNativeObject)
通过复制现有的 Ashmem 对象来创建 Ashmem 对象。
两个 Ashmem 对象指向同一个共享内存区域。
参数:
参数名称 | 参数描述 |
---|---|
unwrappedNativeObject | 表示现有 Ashmem 对象的 ID。 您可以使用 getAshmemIdentity() 方法获取 ID。 |
返回:
返回创建的 Ashmem 对象。
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 | 此方法引发的异常 |
closeAshmem
public void closeAshmem()
关闭此 Ashmem。
通过createAshmem(java.lang.String,int)创建的Ashmem对象不再需要时,必须调用该方法及时关闭,防止内存泄漏。
mapAshmem
public boolean mapAshmem(int mapType)
使用指定的映射类型将 Ashmem 对象映射到此进程。
在使用 Ashmem 读写数据之前,必须调用该方法将 Ashmem 对象映射到该进程上。 映射大小是Ashmem对象的总内存大小,映射从Ashmem的起始位置开始。 映射类型必须包含在为此 Ashmem 对象设置的保护类型中。
参数:
参数名称 | 参数描述 |
---|---|
mapType | 指示要使用的映射类型。 该值是 PROT_READ(可读/不可读)、PROT_WRITE(可写/不可写)、PROT_EXEC(可执行/不可执行)或 PROT_NONE 的按位或组合。 |
返回:
如果映射成功,则返回 true; 否则返回 false。
mapReadAndWriteAShmem
public boolean mapReadAndWriteAShmem()
在 Ashmem 对象和此进程之间创建读/写映射。
映射大小是Ashmem对象的总内存大小,映射从Ashmem的起始位置开始。 调用该方法时,确保Ashmem对象的保护类型包括PROT_READ | PROT_WRITE。
返回:
如果映射成功,则返回 true; 否则返回 false。
mapReadOnlyAShmem
public boolean mapReadOnlyAShmem()
在 Ashmem 对象和此进程之间创建只读映射。
映射大小是Ashmem对象的总内存大小,映射从Ashmem的起始位置开始。 调用此方法时,请确保 Ashmem 对象的保护类型包括 PROT_READ。
返回:
如果映射成功,则返回 true; 否则返回 false。
unmapAShmem
public void unmapAShmem()
从此进程中取消映射 Ashmem 对象。
在您使用完通过 mapAshmem(int)、mapReadAndWriteAshmem 或 mapReadOnlyAshmem 映射到您的进程的 Ashmem 后,您必须调用此方法取消映射以防止内存泄漏。 如果需要,您可以再次创建映射。
setProtection
public boolean setProtection(int protectionType)
设置 Ashmem 对象的保护类型。
保护类型只能添加,不能删除。
一旦设置了保护类型,它将对所有到 Ashmem 对象的映射生效,无论这些映射是在设置保护类型之前还是之后创建的。
参数:
参数名称 | 参数描述 |
---|---|
protectionType | 指示要设置的保护类型。 该值是 PROT_READ、PROT_WRITE、PROT_EXEC 或 PROT_NONE 的按位或运算组合。 |
返回:
设置成功返回true; 否则返回 false。
getAShmemSize
public int getAShmemSize()
获取 Ashmem 对象的内存大小。
返回:
返回 Ashmem 对象的内存大小。
writeToAShmem
public boolean writeToAShmem(byte[] data, int size, int offset)
将数据写入 Ashmem 对象。
您需要控制多进程操作的时序。
在调用该方法之前,请确保您已经获得了Ashmem对象的写权限,并且已经为您的进程创建了到该Ashmem对象的写映射。
参数:
参数名称 | 参数描述 |
---|---|
data | 表示要写入 Ashmem 对象的数据。 |
size | 指示要写入的数据的大小。 |
offset | 指示在 Ashmem 对象中写入数据的起始位置。 |
返回:
如果数据写入成功,则返回 true; 其他场景返回 false,如数据写入越界或未获得写入权限。
readFromAShmem
public byte[] readFromAShmem(int size, int offset)
从 Ashmem 对象中读取数据。
您需要控制多进程操作的时序。
在调用此方法之前,请确保您已获得 Ashmem 对象的读取权限,并且已为您的进程创建了到此 Ashmem 对象的读取映射。
参数:
参数名称 | 参数描述 |
---|---|
size | 指示要读取的数据的大小。 |
offset | 指示 Ashmem 对象中读取数据的起始位置。 |
返回:
返回读取的数据。
getAshmemIdentity
public long getAshmemIdentity()
获取 Ashmem 对象的身份。
返回:
返回 Ashmem 对象的标识。