场景介绍
OpenHarmony提供Purgeable Memory内存管理机制,开发者可以使用相关接口创建PurgeableMemory对象,从而管理purgeable内存。
开发者可以通过本指导了解在OpenHarmony应用中,如何使用Native层相关接口操作purgeable内存。功能包括purgeable内存的申请、释放等。
针对Purgeable Memory内存管理机制,常见的开发场景如下:
- 通过该机制提供的NAPI接口申请管理PurgeableMemory对象,并将数据内容写入该对象。
- 使用完毕后释放。
接口说明
Purgeable Memory应用开发步骤
以下步骤描述了在OpenHarmony中如何使用Purgeable Memory提供的NAPI接口,申请PurgeableMemory对象,并将内容写入PurgeableMemory对象后,对相应对象进行读写访问。
1.声明PurgeableMemory对象创建规则。
// 声明构建函数的参数
struct ParaData{
int start;
int end;
};
// 声明一个使用ModifyFunc
bool FactorialFunc(void* data, size_t size, void* param){
bool ret = true;
ParaData *pdata = (ParaData*) param;
int* oriData = (int*)data;
int i = pdata->start;
while(i<pdata->end){
*oriData *= i;
i++;
}
return ret;
}
// 声明修改PurgeableMemory对象扩展函数的参数
struct AppendParaData{
int newPara;
};
// 声明修改PurgeableMemory对象的扩展函数
bool AddFunc(void* data, size_t size, void* param){
bool ret = true;
int *oriDatap = (int*) data;
AppendParaData* apData = (AppendParaData*)param;
*oriDatap += apData->newPara;
return ret;
}
2.创建PurgeableMemory对象。
// 声明一个4MB的PurgeableMemory对象大小
#define DATASIZE (4 * 1024 * 1024)
// 声明创建函数的参数
struct ParaData pdata = {1,2};
// 创建一个PurgeableMemory对象
OH_PurgeableMemory* pPurgmem = OH_PurgeableMemory_Create(DATASIZE, FactorialFunc, &pdata);
3.读访问PurgeableMemory对象。
//业务定义对象类型
class ReqObj;
// 读取对象
OH_PurgeableMemory_BeginRead(pPurgmem);
// 获取PurgeableMemory对象大小
size_t size = OH_PurgeableMemory_ContentSize(pPurgmem);
// 获取PurgeableMemory对象内容
ReqObj* pReqObj = (ReqObj*) OH_PurgeableMemory_GetContent(pPurgmem);
// 读取PurgeableMemory对象结束
OH_PurgeableMemory_EndRead(pPurgmem);
4.写访问PurgeableMemory对象。
//业务定义对象类型
class ReqObj;
// 修改PurgeableMemory对象
OH_PurgeableMemory_BeginWrite(pPurgmem);
// 获取PurgeableMemory对象数据
ReqObj* pReqObj = (ReqObj*) OH_PurgeableMemory_GetContent(pPurgmem);
// 声明扩展创建函数的参数
struct AppendParaData apdata = {1};
// 更新PurgeableMemory对象重建规则
OH_PurgeableMemory_AppendModify(pPurgmem, AddFunc, &apdata);
// 修改PurgeableMemory对象结束
OH_PurgeableMemory_EndWrite(pPurgmem);
5.销毁PurgeableMemory对象。
// 销毁对象
OH_PurgeableMemory_Destroy(pPurgmem);
// 置空指针防止UAF
pPurgmem = nullptr;
我这边特意整理了《鸿蒙语法ArkTS、TypeScript、ArkUI、实战开发视频教程》以及《鸿蒙生态应用开发白皮书V2.0PDF》《鸿蒙开发学习手册》(共计890页)鸿蒙开发资料等…希望对大家有所帮助:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
OpenHarmony APP开发教程步骤:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
鸿蒙生态应用开发白皮书V2.0PDF:https://docs.qq.com/doc/DZVVkRGRUd3pHSnFG
应用开发中级就业技术:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
应用开发中高级就业技术:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
南北双向高工技能基础:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
全网首发-工业级 南向设备开发就业技术:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
《鸿蒙开发学习手册》:
如何快速入门:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
1.基本概念
2.构建第一个ArkTS应用
3.……
开发基础知识:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
基于ArkTS 开发:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……