鸿蒙HarmonyOS应用开发之内存管理purgeable内存开发指导

249 篇文章 7 订阅
213 篇文章 2 订阅

场景介绍

OpenHarmony提供Purgeable Memory内存管理机制,开发者可以使用相关接口创建PurgeableMemory对象,从而管理purgeable内存。

开发者可以通过本指导了解在OpenHarmony应用中,如何使用Native层相关接口操作purgeable内存。功能包括purgeable内存的申请、释放等。

针对Purgeable Memory内存管理机制,常见的开发场景如下:

  • 通过该机制提供的NAPI接口申请管理PurgeableMemory对象,并将数据内容写入该对象。
  • 使用完毕后释放。

接口说明

接口名描述
OH_PurgeableMemory *OH_PurgeableMemory_Create(size_t size, OH_PurgeableMemory_ModifyFunc func, void *funcPara)创建PurgeableMemory对象,每次调用都会产生一个新的PurgeableMemory对象。
bool OH_PurgeableMemory_Destroy(OH_PurgeableMemory *purgObj)对PurgeableMemory对象进行析构操作。
bool OH_PurgeableMemory_BeginRead(OH_PurgeableMemory *purgObj)对PurgeableMemory对象进行读访问。
void OH_PurgeableMemory_EndRead(OH_PurgeableMemory *purgObj)读操作结束,将PurgeableMemory对象的引用计数减1,当引用计数为0的时候, 该PurgeableMemory对象可以被系统回收。
bool OH_PurgeableMemory_BeginWrite(OH_PurgeableMemory *purgObj)对PurgeableMemory对象进行写访问。
void OH_PurgeableMemory_EndWrite(OH_PurgeableMemory *purgObj)写操作结束,将PurgeableMemory对象的引用计数减1,当引用计数为0的时候,该PurgeableMemory对象可以被系统回收。
void *OH_PurgeableMemory_GetContent(OH_PurgeableMemory *purgObj)获取PurgeableMemory对象内存数据。
size_t OH_PurgeableMemory_ContentSize(OH_PurgeableMemory *purgObj)获取PurgeableMemory对象内存数据大小。
bool OH_PurgeableMemory_AppendModify(OH_PurgeableMemory *purgObj, OH_PurgeableMemory_ModifyFunc func, void *funcPara)添加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;
}
  1. 创建PurgeableMemory对象。
// 声明一个4MB的PurgeableMemory对象大小
#define DATASIZE (4 * 1024 * 1024)

// 声明创建函数的参数
struct ParaData pdata = {1,2};

// 创建一个PurgeableMemory对象
OH_PurgeableMemory* pPurgmem = OH_PurgeableMemory_Create(DATASIZE, FactorialFunc, &pdata);
  1. 读访问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);
  1. 写访问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);
  1. 销毁PurgeableMemory对象。
// 销毁对象
OH_PurgeableMemory_Destroy(pPurgmem);

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值