HarmonyOS-中级(四)
文章目录
- Native适配开发
- 三方库的基本使用
🏡作者主页:点击!
🤖HarmonyOS专栏:点击!
⏰️创作时间:2024年12月09日11点12分

Native适配开发
Node-API
HarmonyOS Node-API 是 HarmonyOS 提供的ArkTS JS C C++ 跨语言调用的接口,在Node.js提供的Node-API基础上扩展而来的,但与其并不完全兼容
- ArkTS Native Module 是提供给开发者使用 Node-API开发的模块,主要用于实现 Native 侧业务逻辑
- ModuleManager:管理对象模块,ArkTS调用C++时,会加载Native侧到ModuleManager,转换为ArkTS对象返回上层
- ScopeManager:用于管理 napi_value 生命周期,napi_value 是Node-API独特的数据类型,类似于ArkTS 中的 number、string等各种数据类型的统一表现形式,在 Native 代码开发中不需要感知不同的数据类型,统一都是 napi_value
- ReferenceManager:用于管理引用,开发时遇到的跨进程场景,这时就需要创建引用 napi_ref,否则就会被垃圾回收掉。napi_ref用于指向napi_value,允许用户管理 napi_value 的生命周期
- Native Engine作用主要统一ArkTS引擎在 Node-API 接口行为
Node-API关键交互流程
- 模块初始化
- ArkTS侧在import一个so库的时候,先找到ArkTS引擎,之后会加载模块到 ModuleManager,对应就是dlopen函数注意:知识首次调用时加载,多次import会去缓存找
- 之后ModuleManager把模块信息返回ArkTS引擎。
- ArkTS拿到模块信息后,在native层触发模块注册,初始化模块,之后调用C++的方法
- 函数调用
- ArkTS通过上述import返回对象调用方法,ArkTS引擎会找到并调用对应的C/C++方法
Node-API数据类型
- napi_status:枚举数据类型
- napi_value:独特的数据类型,类似于ArkTS中的number、String类型
- napi_env:表示Node-API执行时上下文,传递函数中Node-API接口。退出Native侧时,napi_env将失效
- napi_callback_info:native侧函数的入参,保存ArkTS侧参数信息,传递给napi_get_cb_info()函数获取ArkTS侧入参信息
Node-API接口
- napi_get_cb_info:给定的napi_callback_info 中获取有关调用的详细信息
- napi_get_value_double:获取给定ArkTS的number类型值
- napi_create_string_utf8:通过UTF8编码的C字符串数据创建ArkTS侧string类型的数据
Node-API典型场景开发
使用Node-API进行同步任务开发
- 应用侧在调用Native接口后,将会被阻塞等待Native侧计算结果
使用Node-API进行异步任务开发
- 应用侧在调用Native接口后,会收到临时结果,并继续执行UI操作,Native侧将异步执行业务逻辑,不阻塞应用侧
使用Node-API进行线程安全开发
- ArkTS天然线程安全,而Native侧代码需要开发者自行保障线程安全,Native侧C++子线程不可跨线程直接访问 ArkTS 对象
- Node-API提供了可保障线程异步执行与通信安全的机制——线程安全函数
三方库的基本使用
ohpm下载
ohpm安装完成之后在安装的根目录下面 oh-package.json5文件中可找到 @ohos/lottie的配置信息,在oh_modules下的 @ohos 目录找到包的存放位置
- 构建渲染上下文:renderingContext为构建的上下文
- 准备JSON文件文件中描述了动画具体路径
- 关联画布,创建Canvas,绑定renderingContext,并且需要给画布设置一个初始图片背景
- 加载动画,传入之前定义的 Canvas、上下文、JSON文件
相关文章:
HarmonyOS-中级(四)
文章目录 Native适配开发三方库的基本使用 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月09日11点12分 Native适配开发 Node-API HarmonyOS Node-API 是 HarmonyOS 提供的…...
React v19稳定版发布12.5
🤖 作者简介:水煮白菜王 ,一位资深前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧✍。 感谢支持💕💕💕 目…...
【毕业设计选题】深度学习类毕业设计选题参考 开题指导
目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整…...
NanoLog起步笔记-4-Server端的两个线程
nonolog起步笔记-4-Server端的两个线程 Server端的两个线程两个线程的角色与各自的职责RuntimeLogger::compressionThreadMain线程 详细学习一下相关的代码第三个线程第一次出现原位置swip buffer Server端的两个线程 如前所述,nanolog的server端,相对而…...
linux zookeeper安装并服务化
1.版本信息 系统:centos7.6 java版本:java 8(已经安装好) zookeeper版本:3.6.3 2.zookeeper安装并测试 1.上传文件至指定目录并解压 切换至cd downloads 目录下, rz上传文件 解压:tar -zxvf apache-zookeeper-3.…...
很简单,但是很实用。把docker run改写成docker compose。
很简单,但是很实用。把docker run改写成docker compose。 在Docker的世界里,docker run命令是启动容器最直接的方式之一。然而,当项目复杂度增加,涉及多个服务时,管理这些容器和服务之间的依赖关系就会变得繁琐。这时,使用Docker Compose来定义和运行多容器Docker应用就…...
DAMODEL丹摩|丹摩平台:AI时代的开发者福音
本文仅对丹摩平台进行介绍,非广告。 文章目录 1. 丹摩平台简介2. 平台特性2. 1 超友好的用户体验2. 2 资源丰富的GPU覆盖2. 3 强大的性能2. 4 超实惠的价格2. 5 不同目的推荐的配置2. 6 启动环境 3. 快速上手丹摩平台3. 1 创建项目与资源实例3. 2 储存选项3. 3 数据…...
全面解析租赁小程序的功能与优势
内容概要 租赁小程序正在逐渐改变人与物之间的互动方式。通过这些小程序,用户不仅可以轻松找到所需的租赁商品,还能够享受无缝的操作体验。为了给大家一个清晰的了解,下面我们将重点介绍几个核心功能。 建议:在选择租赁小程序时&…...
VRRP的知识点总结及实验
1、VRRP VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)既能够实现网关的备份,又能解决多个网关之间互相冲突的问题,从而提高网络可靠性。 2、VRRP技术概述: 通过把几台路由设备联合组成一台虚拟的“路由设备”…...
商业银行基于容器云的分布式数据库架构设计与创新实践
导读 本文介绍了某商业银行基于 TiDB 和 Kubernetes(简称 K8s) 构建的云化分布式数据库平台,重点解决了传统私有部署模式下的高成本、低资源利用率及运维复杂等问题。 通过引入 TiDB Operator 自动化管理与容器化技术,银行能够实现多个业务系统的高可用…...
2025计算机毕设选题推荐【30条选题】【基础功能+创新点设计】
✅博主介绍:CSDN毕设辅导博主、CSDN认证 Java领域优质创作者 ✅技术范围:主要包括Java、Vue、Python、爬虫、小程序、安卓app、大数据、机器学习等设计与开发。 ✅主要内容:免费功能设计、开题报告、任务书、功能实现、代码编写、论文编写和…...
SpringBoot+OSS文件(图片))上传
SpringBoot整合OSS实现文件上传 以前,文件上传到本地(服务器,磁盘),文件多,大,会影响服务器性能 如何解决? 使用文件服务器单独存储这些文件,例如商业版–>七牛云存储,阿里云OSS,腾讯云cos等等 也可以自己搭建文件服务器(FastDFS,minio) 0 过程中需要实名认证 … 1 开…...
docker镜像构建企业级示例
华子目录 示例(在centos容器中源码编译nginx(单介构建))包准备为centos容器提供网络源添加企业7的ISO文件 提交为新的centos镜像编写dockerfile文件构建镜像如何优化自己构建的镜像大小多介构建 ldd命令基本用法示例 镜像优化方案…...
【源码】Sharding-JDBC源码分析之SQL中读写分离动态策略、数据库发现规则及DatabaseDiscoverySQLRouter路由的原理
Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 6、【…...
Spark 之 partitons
Listing leaf files and directories 分析其并行化 org.apache.spark.util.HadoopFSUtils sc.parallelize(paths, numParallelism).mapPartitions { pathsEachPartition >val hadoopConf serializableConfiguration.valuepathsEachPartition.map { path >val leafFiles…...
使用Zerotier配置虚拟局域网,踏坑
配置虚拟局域网有多种方式,包括带桌面的和纯网络的。 一、带桌面的(不是本次重点) 常见工具:向日葵、todesk、anydesk、restDesk 前两者是常见商业工具,anydesk好像很轻,restDesk是开源项目,…...
【优选算法 二分查找】二分查找算法模板详解:二分查找 & 在排序数组中查找元素的第一个和最后一个位置
二分查找 题目描述 题目解析 暴力解法 我们可以从左往右遍历一次数组,如果存在 target 则返回数组的下标,否则返回 -1; 时间复杂度 O(N),因为没有利用数组有序的特点,每次比较只能舍弃一个要比较的数&…...
gitlab 生成并设置 ssh key
一、介绍 🎯 本文主要介绍 SSH Key 的生成方法,以及如何在GitLab上添加SSH Key。GitLab 使用SSH协议与Git 进行安全通信。当您使用 SSH密钥 对 GitLab远程服务器进行身份验证时,您不需要每次都提供您的用户名和密码。SSH使用两个密钥&#x…...
计算机视觉在科学研究(数字化)中的实际应用
计算机视觉是一种利用计算机技术来解析和理解图像和视频的方法。.随着计算机技术的不断发展,计算机视觉被广泛应用于科学研究领域,为科学家提供了无限的可能。 一、生命科学领域 在生命科学领域,计算机视觉被广泛用于图像识别、分类和测量等…...
移动应用开发课程第六次实验:为实验2添加登陆页面,用SQList存储好友基本信息
1、在Android Studio中,请在第二次实验成果的基础上完成以下实验要求。 向右滑动 请添加登录页面。在登录页面中,如果用户输入的用户名和密码正确,则跳转至如上图所示的好友列表,并记录用户的登录信息,在用户第一次登…...
告别手动维护!用DataX-Web搞定MySQL到ClickHouse的增量同步(含时间戳配置)
高效构建MySQL到ClickHouse的增量同步管道:DataX-Web实战指南 在数据驱动的商业环境中,企业每天都会产生海量的业务数据。这些数据通常存储在OLTP系统如MySQL中,但为了进行分析和报表生成,我们需要将这些数据同步到OLTP系统如Clic…...
Xilinx UltraScale GT收发器实战:从时钟配置到8B/10B编码的避坑指南
Xilinx UltraScale GT收发器实战:从时钟配置到8B/10B编码的避坑指南 在高速数字系统设计中,Xilinx UltraScale系列FPGA的GT收发器是实现多Gbps数据通信的核心组件。然而,许多工程师在实际部署时会遇到时钟配置混乱、弹性缓冲区溢出等棘手问题…...
Ollama部署LFM2.5-1.2B-Thinking:从CSDN文档到实际调用的完整链路
Ollama部署LFM2.5-1.2B-Thinking:从CSDN文档到实际调用的完整链路 1. 认识LFM2.5-1.2B-Thinking模型 LFM2.5-1.2B-Thinking是一个专门为设备端部署设计的智能文本生成模型。这个模型属于LFM2.5系列,是在LFM2架构基础上通过扩展预训练和强化学习进一步优…...
Anaconda环境配置:TranslateGemma开发最佳实践
Anaconda环境配置:TranslateGemma开发最佳实践 1. 环境准备与快速部署 如果你正在尝试运行TranslateGemma-12B-it这样的翻译模型,很可能会遇到Python版本冲突、CUDA不兼容或者依赖包打架的问题。Anaconda的环境隔离功能正好能解决这些头疼的事情。 An…...
《与AI的妄想对话:如何给机器人造灵魂?》
本文为个人想法分享,是一种幻觉创作,只图一乐。 #赛博哲学 #概念艺术 #AI幻想 #科幻微小说提问: 你分析一下下面这段文章里面的harness它的构建原则。我觉得他和我们这个理论里面说的某一些东西我感觉很像好像是这种智能的或者说锚点定义的简…...
Qwen3-0.6B-FP8模型服务化:使用Git进行版本管理与CI/CD集成
Qwen3-0.6B-FP8模型服务化:使用Git进行版本管理与CI/CD集成 1. 引言 咱们做AI模型部署的,是不是经常遇到这种烦心事:好不容易把模型服务调通了,过两天想加点新功能,结果发现原来的配置参数、客户端代码、甚至API封装…...
Cortex-M 配置控制寄存器(CCR)的实战应用与优化技巧
1. Cortex-M配置控制寄存器(CCR)基础解析 第一次接触Cortex-M处理器的CCR寄存器时,我完全被这个看似简单却功能强大的寄存器震撼到了。这个位于系统控制块(SCB)中的32位寄存器,地址固定在0xE000ED14&#x…...
从WHL文件到集成开发:Windows系统下PySide2的完整部署指南
1. 为什么选择PySide2开发Windows GUI应用 用Python开发图形界面程序有很多选择,但PySide2绝对是Windows平台下最值得推荐的工具之一。作为Qt官方绑定的Python库,PySide2不仅功能强大,还能免费商用。我最早接触PySide2是在一个工业控制项目里…...
SlopeCraft终极指南:如何轻松将任何图片转换为Minecraft立体地图画
SlopeCraft终极指南:如何轻松将任何图片转换为Minecraft立体地图画 【免费下载链接】SlopeCraft Map Pixel Art Generator for Minecraft 项目地址: https://gitcode.com/gh_mirrors/sl/SlopeCraft 你是否曾梦想将心爱的照片、动漫角色或艺术作品搬进Minecra…...
从逆向工程到实战:深度解析钉钉本地数据取证与加密对抗
1. 钉钉本地数据存储结构解析 第一次拆解钉钉的数据库文件时,我对着那堆加密的.sqlite文件发了半小时呆。作为国内用户量最大的企业通讯工具,钉钉在数据保护上确实下了狠功夫。Android和iOS两个平台的数据存储方式既有共性又存在微妙差异,这正…...
