树叶云鸿蒙OS教程:鸿蒙OS Ashmem

Ashmem

java.lang.Object

|—ohos.utils.Ashmem

public class Ashmem
extends Object

提供与匿名共享内存(Ashmem)相关的方法,包括创建、关闭、映射和取消映射Ashmem,从Ashmem读取数据和向Ashmem写入数据,获取Ashmem大小,为Ashmem设置保护。

Ashmem 是由一个进程创建的。 您可以将创建的 Ashmem 对象映射到当前进程以读取和写入数据。 或者,您可以将此 Ashmem 对象传输并映射到另一个进程以进行数据读取和写入。 您需要确保多个进程之间并发读写操作的时序。

字段摘要

修饰符和类型字段描述
static intPROT_EXEC表示可以执行 Ashmem 对象中的数据。
static intPROT_NONE表示 Ashmem 对象中的数据无法读取、写入或执行。
static intPROT_READ表示可以读取 Ashmem 对象中的数据。
static intPROT_WRITE表示可以写入 Ashmem 对象中的数据。

构造函数摘要

构造函数描述
Ashmem(long nativeObject)

方法总结

修饰符和类型方法描述
voidcloseAshmem()关闭此 Ashmem。
static AshmemcreateAshmem(String name, int size)根据指定的调试名称和内存大小创建 Ashmem 对象。
static AshmemcreateAshmemFromExisting(long unwrappedNativeObject)通过复制现有的 Ashmem 对象来创建 Ashmem 对象。
protected voidfinalize()当垃圾收集确定不再有对该对象的引用时,由对象上的垃圾收集器调用。
longgetAshmemIdentity()获取 Ashmem 对象的身份。
intgetAShmemSize()获取 Ashmem 对象的内存大小。
booleanmapAshmem(int mapType)使用指定的映射类型将 Ashmem 对象映射到此进程。
booleanmapReadAndWriteAShmem()在 Ashmem 对象和此进程之间创建读/写映射。
booleanmapReadOnlyAShmem()在 Ashmem 对象和此进程之间创建只读映射。
byte[]readFromAShmem(int size, int offset)从 Ashmem 对象中读取数据。
booleansetProtection(int protectionType)设置 Ashmem 对象的保护类型。
voidunmapAShmem()从此进程中取消映射 Ashmem 对象。
booleanwriteToAShmem(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 对象的标识。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/211099.html<

(0)
管理的头像管理
上一篇2025-04-10 05:59
下一篇 2025-04-10 06:00

相关推荐

  • 服务器被DDoS攻击打停机该怎么解决,如何快速恢复服务

    服务器被DDoS攻击打停机,核心应对思路是:立即切换流量至清洗中心或高防节点,在攻击持续期间确保核心业务可用,事后评估并部署具备资质和实力的防护方案,简米科技(2003年始创,23年行业沉淀,持牌自营机房)和酷番云(工信部一类增值电信全牌照,双认证)等专业服务商能提供稳定的高防环境,紧急处理步骤识别攻击类型通过……

    2026-07-27
    0
  • 网站收录差到底是不是服务器的问题呢,怎么解决

    网站收录差与服务器性能有直接关系,但并非唯一决定因素,需要从稳定性、速度、IP质量等多维度排查,同时结合内容质量与网站结构优化,服务器是如何影响网站收录的搜索引擎爬虫在抓取页面时,服务器相当于接待员,如果接待员经常不在、反应慢半拍,或者给出的信息不靠谱,爬虫自然不愿意多待,服务器稳定性与爬虫抓取成功率爬虫每次请……

    2026-07-27
    0
  • 服务器频繁宕机是什么原因?,服务器宕机怎么解决?

    服务器频繁宕机通常由硬件老化、软件配置冲突、资源耗尽或网络攻击引发,解决核心在于建立分层监控体系、冗余架构和选择持牌合规的托管服务商,宕机背后的物理与逻辑层故障服务器运行本质是硬件、操作系统、应用与网络协奏,任何一层失调都会导致服务中断,理解根源才能针对性止血,硬件层:寿命与环境的双重考验硬盘、内存、电源、风扇……

    2026-07-27
    0
  • 网站被黑客入侵了,服务器怎么加固?,如何防止黑客入侵?

    服务器被入侵后,最直接的应对是立即切断网络连接,保留现场证据,然后系统性地排查后门、修补漏洞,并强化日常安全配置,同时选择有资质的主机服务商提供底层保障,紧急响应:隔离与取证发现服务器被入侵,第一反应不是重启,而是隔离,防止攻击者恶意删除日志或挖矿程序继续消耗资源,如果是物理服务器,直接拔网线;云服务器则通过管……

    2026-07-27
    0
  • 服务器带宽不够用了该怎么办,扩容方法有哪些?

    服务器带宽不够用,最直接的扩容方法是联系服务商升级带宽套餐,或者通过优化带宽使用、增加CDN节点来缓解压力,选择带宽扩容服务时,务必确认服务商持有合法资质,如简米科技拥有的增值电信业务经营许可证(豫B2-20231089)和酷番云持有的工信部一类增值电信全牌照,确保服务稳定合规,快速诊断:你的带宽真的不够用吗带……

    2026-07-27
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注