当前位置: 首页 > article >正文

HarmonyOS-中级(四)

文章目录

    • Native适配开发
    • 三方库的基本使用

https://i-blog.csdnimg.cn/blog_migrate/58966ddd9b29aabe8841f5ec34f0d31c.gif

🏡作者主页:点击!

🤖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关键交互流程

  • 模块初始化
    1. ArkTS侧在import一个so库的时候,先找到ArkTS引擎,之后会加载模块到 ModuleManager,对应就是dlopen函数注意:知识首次调用时加载,多次import会去缓存找
    2. 之后ModuleManager把模块信息返回ArkTS引擎。
    3. ArkTS拿到模块信息后,在native层触发模块注册,初始化模块,之后调用C++的方法
  • 函数调用
    1. 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文件

http://www.kler.cn/a/430457.html

相关文章:

  • 【深度学习进阶】基于CNN的猫狗图片分类项目
  • 41.5 nginx拦截prometheus查询请求使用lua脚本做promql的检查替换
  • C# 服务应用研究
  • python制作打字小游戏
  • Redis 发布订阅(Pub/Sub)机制详解
  • 重装操作系统后 Oracle 11g 数据库数据还原
  • 中国卫生健康统计年鉴Excel+PDF电子版2022年-社科数据
  • 【Android Studio】学习——网络连接
  • 如何判断一个值是否是数组
  • QT requested database does not belong to the calling thread.线程中查询数据报错
  • OpenCV相机标定与3D重建(10)眼标定函数calibrateHandEye()的使用
  • go语言的成神之路-标准库篇-fmt标准库
  • 力扣刷题TOP101: 27.BM34 判断是不是二叉搜索树
  • Erlang/OTP绿色版安装和RabbitMQ绿色版安装
  • 如何制作“优美”PPT
  • 【从零开始的LeetCode-算法】383. 赎金信
  • 《Vue进阶教程》第二课:为什么提出组合式API
  • 证书监控续签工具
  • 机器学习(4)Kmeans算法
  • 助推县域客运转型升级!合江荣程运业上线苏州金龙新V系纯电客车
  • TCP Robot Send Recive
  • Apache Echarts和POI
  • 在Vue.js中生成二维码(将指定的url+参数 生成二维码)
  • 大数据算法:初始权重影响对比-BN算法
  • 力扣打卡8:最长上升子序列
  • jenkins邮件的配置详解