鸿蒙OH实战开发:NAPI 类对象导出及其生命周期管理(下)


📚往期学习笔录📝:

📝 鸿蒙(HarmonyOS)北向开发知识点记录~
📝 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
📝 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?
📝 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
📝 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?
📝 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?
📝 记录一场鸿蒙开发岗位面试经历~
📝 持续更新中……


4. 样例工程源码剖析

  • 工程的模板是Native C++,模型是Stage
  • 源码剖析主要围绕以下几个文件

4.1. NAPI导出对象和生命周期管理具体实现

4.1.1. 定义NapiTest类及方法
  • Napi.h文件内容如下:
#ifndef __NAPI_TEST_H__
#define __NAPI_TEST_H__

#include "napi/native_api.h"
#include <js_native_api_types.h>

#include <iostream>

#define NAPI_CLASS_NAME "NapiTestClass"

class NapiTest {
public:
NapiTest() : mEnv(nullptr), mRef(nullptr) {
}
  
NapiTest(napi_env env) : mEnv(env), mRef(nullptr){
}
~NapiTest();
  
  // 创建NapiTest类的实体,并将实体返回到应用端,该方法为js创建一个类实体,因此需要将该接口对外导出
static napi_value Create(napi_env env, napi_callback_info info);
  
  // 初始化js类并设置对应属性并将其导出   
static napi_value Init(napi_env env, napi_value exports);         


private:
  
  // 设置数据,此方法给到js直接调用,因此需要将该接口对外导出
  static napi_value SetMsg(napi_env env, napi_callback_info info);
  
  // 获取数据,此方法给到js直接调用,因此需要将该接口对外导出    
  static napi_value GetMsg(napi_env env, napi_callback_info info);
  
  // 定义js结构体时实际的构建函数
  static napi_value Constructor(napi_env env, napi_callback_info info);     

  // 释放资源的函数(类似类的析构函数)    
  static void Destructor(napi_env env, void *nativeObject, void *finalize); 

  // 生命周期变量    
  static napi_ref sConstructor_;  

  // 设置和获取数据的变量    
  static std::string _msg;        

  // 记录环境变量    
  napi_env mEnv = nullptr;        

  // 记录生命周期变量    
  napi_ref mRef = nullptr;        

};

#endif  /* __NAPI_TEST_H__ */
4.1.1.1 napi_value
  • Node.js Node-API的值用napi_value类型表示。
    OpenHarmony NAPI将ECMAScript标准中定义的Boolean、Null、Undefined、Number、BigInt、String、Symbol和Object八种数据类型,以及函数对应的Function类型,统一封装成napi_value类型,下文中表述为JS类型,用于接收ArkUI应用传递过来的数据及返回数据给ArkUI应用。
  • 这是一个不透明的指针,用于表示JavaScript值。
4.1.1.2 napi_ref
  • 这是用来引用napi_value的抽象。这允许用户管理JavaScript值的生命周期,包括显式地定义它们的最小生命周期。
4.1.1.3 napi_env
  • napi_env用于表示上下文,底层的Node-API实现可以使用该上下文持久保持VM-specific的状态。
4.1.2 将NapiTest类定义为js类
4.1.2.1在定义js类之前,需要先设置js类对外导出的方法
    // 在定义js类之前,需要先设置类对外导出的方法
    napi_property_descriptor desc[] = {
        { "getMsg",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值