鴻蒙OS Ashmem

2022-08-17 10:11 更新

Ashmem

java.lang.Object

|---ohos.utils.Ashmem

public class Ashmem
extends Object

提供與匿名共享內存(Ashmem)相關的方法,包括創(chuàng)建、關閉、映射和取消映射Ashmem,從Ashmem讀取數據和向Ashmem寫入數據,獲取Ashmem大小,為Ashmem設置保護。

Ashmem 是由一個進程創(chuàng)建的。 您可以將創(chuàng)建的 Ashmem 對象映射到當前進程以讀取和寫入數據。 或者,您可以將此 Ashmem 對象傳輸并映射到另一個進程以進行數據讀取和寫入。 您需要確保多個進程之間并發(fā)讀寫操作的時序。

字段摘要

修飾符和類型 字段 描述
static int PROT_EXEC 表示可以執(zhí)行 Ashmem 對象中的數據。
static int PROT_NONE 表示 Ashmem 對象中的數據無法讀取、寫入或執(zhí)行。
static int PROT_READ 表示可以讀取 Ashmem 對象中的數據。
static int PROT_WRITE 表示可以寫入 Ashmem 對象中的數據。

構造函數摘要

構造函數 描述
Ashmem(long nativeObject)

方法總結

修飾符和類型 方法 描述
void closeAshmem() 關閉此 Ashmem。
static Ashmem createAshmem(String name, int size) 根據指定的調試名稱和內存大小創(chuàng)建 Ashmem 對象。
static Ashmem createAshmemFromExisting(long unwrappedNativeObject) 通過復制現有的 Ashmem 對象來創(chuàng)建 Ashmem 對象。
protected void finalize() 當垃圾收集確定不再有對該對象的引用時,由對象上的垃圾收集器調用。
long getAshmemIdentity() 獲取 Ashmem 對象的身份。
int getAShmemSize() 獲取 Ashmem 對象的內存大小。
boolean mapAshmem(int mapType) 使用指定的映射類型將 Ashmem 對象映射到此進程。
boolean mapReadAndWriteAShmem() 在 Ashmem 對象和此進程之間創(chuàng)建讀/寫映射。
boolean mapReadOnlyAShmem() 在 Ashmem 對象和此進程之間創(chuàng)建只讀映射。
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

表示可以執(zhí)行 Ashmem 對象中的數據。

它可用于設置 Ashmem 對象的保護或映射類型。

PROT_NONE

public static final int PROT_NONE

表示 Ashmem 對象中的數據無法讀取、寫入或執(zhí)行。

它可用于設置 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)

根據指定的調試名稱和內存大小創(chuàng)建 Ashmem 對象。

調試名稱僅用于在檢查已映射到此 Ashmem 的進程的內存映射時查詢有關此 Ashmem 的信息。

參數:

參數名稱 參數描述
name 調試名稱,方便查詢Ashmem信息。
size 指示 Ashmem 的大小。

返回:

返回創(chuàng)建的 Ashmem 對象; 如果創(chuàng)建失敗則返回 null。

createAshmemFromExisting

public static Ashmem createAshmemFromExisting(long unwrappedNativeObject)

通過復制現有的 Ashmem 對象來創(chuàng)建 Ashmem 對象。

兩個 Ashmem 對象指向同一個共享內存區(qū)域。

參數:

參數名稱 參數描述
unwrappedNativeObject 表示現有 Ashmem 對象的 ID。 您可以使用 getAshmemIdentity() 方法獲取 ID。

返回:

返回創(chuàng)建的 Ashmem 對象。

finalize

protected void finalize() throws Throwable

從類復制的描述:對象

當垃圾收集確定不再有對該對象的引用時,由對象上的垃圾收集器調用。子類覆蓋 finalize 方法以釋放系統(tǒng)資源或執(zhí)行其他清理。

finalize 的一般約定是,當 Java? 虛擬機確定不再有任何方法可以讓任何尚未終止的線程訪問該對象時調用它,除非是由于某個操作而導致的。由準備完成的其他對象或類的完成所采取。 finalize 方法可以采取任何行動,包括使該對象再次可供其他線程使用;然而,finalize 的通常目的是在對象被不可撤銷地丟棄之前執(zhí)行清理操作。例如,代表輸入/輸出連接的對象的 finalize 方法可能會執(zhí)行顯式 I/O 事務以在對象被永久丟棄之前中斷連接。

Object 類的 finalize 方法不執(zhí)行任何特殊操作;它只是正常返回。 Object 的子類可以覆蓋這個定義。

Java 編程語言不保證哪個線程將為任何給定對象調用 finalize 方法。但是,可以保證調用 finalize 的線程在調用 finalize 時不會持有任何用戶可見的同步鎖。如果 finalize 方法拋出未捕獲的異常,則忽略該異常并終止該對象的終結。

在為一個對象調用 finalize 方法后,不會采取進一步的行動,直到 Java 虛擬機再次確定沒有任何方法可以讓任何尚未終止的線程訪問該對象,包括可能的行動由其他準備完成的對象或類,此時該對象可能被丟棄。

對于任何給定的對象,Java 虛擬機永遠不會多次調用 finalize 方法。

finalize 方法拋出的任何異常都會導致該對象的終結被暫停,否則會被忽略。

覆蓋:

在類 Object 中完成

Throws:

Throw名稱 Throw描述
Throwable 此方法引發(fā)的異常

closeAshmem

public void closeAshmem()

關閉此 Ashmem。

通過createAshmem(java.lang.String,int)創(chuàng)建的Ashmem對象不再需要時,必須調用該方法及時關閉,防止內存泄漏。

mapAshmem

public boolean mapAshmem(int mapType)

使用指定的映射類型將 Ashmem 對象映射到此進程。

在使用 Ashmem 讀寫數據之前,必須調用該方法將 Ashmem 對象映射到該進程上。 映射大小是Ashmem對象的總內存大小,映射從Ashmem的起始位置開始。 映射類型必須包含在為此 Ashmem 對象設置的保護類型中。

參數:

參數名稱 參數描述
mapType 指示要使用的映射類型。 該值是 PROT_READ(可讀/不可讀)、PROT_WRITE(可寫/不可寫)、PROT_EXEC(可執(zhí)行/不可執(zhí)行)或 PROT_NONE 的按位或組合。

返回:

如果映射成功,則返回 true; 否則返回 false。

mapReadAndWriteAShmem

public boolean mapReadAndWriteAShmem()

在 Ashmem 對象和此進程之間創(chuàng)建讀/寫映射。

映射大小是Ashmem對象的總內存大小,映射從Ashmem的起始位置開始。 調用該方法時,確保Ashmem對象的保護類型包括PROT_READ | PROT_WRITE。

返回:

如果映射成功,則返回 true; 否則返回 false。

mapReadOnlyAShmem

public boolean mapReadOnlyAShmem()

在 Ashmem 對象和此進程之間創(chuàng)建只讀映射。

映射大小是Ashmem對象的總內存大小,映射從Ashmem的起始位置開始。 調用此方法時,請確保 Ashmem 對象的保護類型包括 PROT_READ。

返回:

如果映射成功,則返回 true; 否則返回 false。

unmapAShmem

public void unmapAShmem()

從此進程中取消映射 Ashmem 對象。

在您使用完通過 mapAshmem(int)、mapReadAndWriteAshmem 或 mapReadOnlyAshmem 映射到您的進程的 Ashmem 后,您必須調用此方法取消映射以防止內存泄漏。 如果需要,您可以再次創(chuàng)建映射。

setProtection

public boolean setProtection(int protectionType)

設置 Ashmem 對象的保護類型。

保護類型只能添加,不能刪除。

一旦設置了保護類型,它將對所有到 Ashmem 對象的映射生效,無論這些映射是在設置保護類型之前還是之后創(chuàng)建的。

參數:

參數名稱 參數描述
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對象的寫權限,并且已經為您的進程創(chuàng)建了到該Ashmem對象的寫映射。

參數:

參數名稱 參數描述
data 表示要寫入 Ashmem 對象的數據。
size 指示要寫入的數據的大小。
offset 指示在 Ashmem 對象中寫入數據的起始位置。

返回:

如果數據寫入成功,則返回 true; 其他場景返回 false,如數據寫入越界或未獲得寫入權限。

readFromAShmem

public byte[] readFromAShmem(int size, int offset)

從 Ashmem 對象中讀取數據。

您需要控制多進程操作的時序。

在調用此方法之前,請確保您已獲得 Ashmem 對象的讀取權限,并且已為您的進程創(chuàng)建了到此 Ashmem 對象的讀取映射。

參數:

參數名稱 參數描述
size 指示要讀取的數據的大小。
offset 指示 Ashmem 對象中讀取數據的起始位置。

返回:

返回讀取的數據。

getAshmemIdentity

public long getAshmemIdentity()

獲取 Ashmem 對象的身份。

返回:

返回 Ashmem 對象的標識。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號