1# ArkTS使用Node-API进行life-cycle相关开发 2 3### 介绍 4 5在Node-API中,napi_value是一个表示ArkTS值的抽象类型,它可以表示任何ArkTS值,包括基本类型(如数字、字符串、布尔值)和复杂对象类型(如数组、函数、对象等),napi_value的生命周期与其在ArkTS中的对应值的生命周期紧密相关。当ArkTS值被垃圾回收时,与之关联的napi_value也将不再有效。重要的是不要在ArkTS值不再存在时尝试使用napi_value,框架层的scope通常用于管理napi_value的生命周期。在Node-API中,可以使用napi_open_handle_scope和napi_close_handle_scope函数来创建和销毁scope。通过在scope内创建napi_value,可以确保在scope结束时自动释放napi_value,避免内存泄漏,napi_ref是一个Node-API类型,用于管理napi_value的生命周期。napi_ref允许您在napi_value的生命周期内保持对其的引用,即使它已经超出了其原始上下文的范围。这使得您可以在不同的上下文中共享napi_value,并确保在不再需要时正确释放其内存,本工程中展示的代码详细描述可查如下链接。 6 7- [使用Node-API进行life-cycle相关开发](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/napi/use-napi-life-cycle.md) 8 9### 效果预览 10 11| 首页 | 执行结果图 | 12| ------------------------------------------------------------ | ------------------------------------------------------------ | 13| <img src="./screenshots/NodeAPILifeCycle1.png" style="zoom: 50%;" /> | <img src="./screenshots/NodeAPILifeCycle2.png" style="zoom: 50%;" /> | 14 15### 使用说明 16 171. 运行Index主界面。 182. 页面呈现上述首页效果,分别点击ListItem组件可以执行对应文本内容的Node-API接口并将文本Result:改为执行成功结果,然后在控制台中打印出对应日志。 193. 运行测试用例NodeAPILifeCycle.test.ets文件对页面代码进行测试可以全部通过。 20 21### 工程目录 22 23``` 24entry/src/ 25 ├── main 26 │ ├── cpp 27 │ │ ├── types 28 │ │ ├── Index.d.ts 29 │ │ ├── oh-package.json5 30 │ │ ├── CMakeLists.txt 31 │ │ ├── napi_init.cpp 32 │ ├── ets 33 │ │ ├── entryability 34 │ │ ├── entrybackupability 35 │ │ ├── pages 36 │ │ ├── Index.ets // 使用Node-API进行life-cycle相关开发示例代码 37 │ ├── module.json5 38 │ └── resources 39 ├── ohosTest 40 │ ├── ets 41 │ │ └── test 42 │ │ ├── Ability.test.ets 43 │ │ ├── NodeAPILifeCycle.test.ets // 自动化测试代码 44 │ │ └── List.test.ets 45``` 46 47### 相关权限 48 49不涉及。 50 51### 依赖 52 53不涉及。 54 55### 约束与限制 56 571.本示例仅支持标准系统上运行, 支持设备:RK3568。 58 592.本示例为Stage模型,支持API14版本SDK,版本号:5.0.2.57,镜像版本号:OpenHarmony_5.0.2.58。 60 613.本示例需要使用DevEco Studio 5.0.1 Release (Build Version: 5.0.5.306, built on December 6, 2024)及以上版本才可编译运行。 62 63### 下载 64 65如需单独下载本工程,执行如下命令: 66 67```` 68git init 69git config core.sparsecheckout true 70echo code/DocsSample/ArkTs/NodeAPI/NodeApiUse/NodeAPILifeCycle > .git/info/sparse-checkout 71git remote add origin https://gitee.com/openharmony/applications_app_samples.git 72git pull origin master 73````