鸿蒙HarmonyOS应用开发之purgeable内存管理机制

场景介绍

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)学习路线与学习文档给大家用来跟着学习。

针对一些列因素,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN

如何快速入门?

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


在这里插入图片描述

开发基础知识

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

基于ArkTS 开发

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

鸿蒙开发面试真题(含参考答案):https://gitcode.com/HarmonyOS_MN

OpenHarmony 开发环境搭建:https://gitcode.com/HarmonyOS_MN


在这里插入图片描述

《OpenHarmony源码解析》:https://gitcode.com/HarmonyOS_MN

搭建开发环境
系统架构分析

  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值