成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

觸覺智能RK3568使用體驗—NAPI 類對象導出及其生命周期管理(上)

系統 OpenHarmony
Node.js Node-API為開發者提供了一套C/C++ API用于開發Node.js的Native擴展模塊。從Node.js 8.0.0開始,Node-API以實驗性特性作為Node.js本身的一部分被引入,并且從Node.js 10.0.0開始正式全面支持Node-API。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

寫在開頭:

OpenHarmony 中的 N-API組件定義了由ArkTS (JS/ETS)語言編寫的代碼和 native 代碼(使用 C/C++ 編寫)交互的方式,由 Node.js Node-API 框架擴展而來。

什么是Node.js Node-API 框架

Node.js Node-API為開發者提供了一套C/C++ API用于開發Node.js的Native擴展模塊。從Node.js 8.0.0開始,Node-API以實驗性特性作為Node.js本身的一部分被引入,并且從Node.js 10.0.0開始正式全面支持Node-API。

本文以OpenHarmony 3.2beta3源碼中的node.js三方庫為例,從third_party/node/README.OpenSource中可得知3.2beta3移植的node版本為14.19.1,因此可參考的Node.js N-API鏈接為14.19.1版本,如下:https://nodejs.org/docs/latest-v14.x/api/n-api.html。

接口名方面,OpenHarmony 中的 N-API 組件提供的接口名與三方庫Node.js一致,目前支持部分接口,詳情見??libnapi.ndk.json??文件。

本篇是該系列文章的第5篇上半部分。有離北況歸的地方就一定會有樣例源碼,本文提供了一個IDE開發的NAPI工程用來學習本篇知識點,下半部分將對源碼進行解析。通過本文您將熟悉:

  • NAPI 導出類對象
  • NAPI 對象生命周期管理

1、NAPI 類對象導出

OpenHarmony NAPI提供了一種“包裝”C ++類和實例的方法,以便JS應用可以調用類的構造函數和方法。

Node.js Node-API中關于導出類對象的內容,參考鏈接 : https://nodejs.org/docs/latest-v14.x/api/n-api.html#n_api_object_wrap

(1)NAPI導出類對象流程

通過napi_define_class定義一個JS類。

  • 它包含了與 C++ 類對應的構造函數、靜態屬性、方法、實例屬性和方法。

通過napi_wrap將 C++ 實例綁定在 JS對象中。

  • 當 JS代碼調用構造函數時,構造函數回調會使用napi_wrap將一個新的 C++ 實例綁定在 JS對象中,然后返回綁定的C++ 實例。

通過napi_unwrap獲取作為調用目標的C++ 實例。

  • 當 JS調用C++ 類 的方法或屬性時,會調用相應的napi_callback C++ 函數。對于實例回調,napi_unwrap獲取作為調用目標的 C++ 實例 。

這里的napi_callback C++ 函數是指被 Node.js Node-API調用的C++ 函數。


[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

2、NAPI 對象生命周期

程序的生命周期是指程序從啟動,運行到結束的整個過程。

NAPI 對象的生命周期代表著從對象創建到釋放的整個過程,如下圖所示:

在ArkTS應用啟動時會加載NAPI模塊,而在NAPI模塊加載過程中會創建一個對象A提供給應用使用,在應用退出或者主動釋放A對象前,A對象必須一直保持"活躍"狀態。從A對象創建到釋放的整個過程也代表著A對象的生命周期。

[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

以下是Node-API 中關于對象生命周期的解釋:

當調用Node-API時,底層虛擬機在堆中對象的句柄可能以napi_values的形式返回。這些句柄必須保持對象“活動”,直到本地代碼不再需要它們。參考鏈接:https://nodejs.org/docs/latest-v14.x/api/n-api.html#n_api_object_lifetime_management

句柄是一個標識符,是用來標識對象的。

NAPI 環境生命周期API的內容參考鏈接如下:https://nodejs.org/docs/latest-v14.x/api/n-api.html#n_api_environment_life_cycle_apis

3、關于本文提供的樣例工程

本文提供了一個IDE開發的NAPI工程用來學習NAPI 類對象導出和對象生命周期管理。

筆者運行環境:

  • 觸覺智能 IDO-EVB3568-V1 開發板
  • OpenHarmony 3.2Beta2
  • DevEco Studio 3.1.0.100

(1)觸覺智能 IDO-EVB3568-V1 開發板

觸覺智能的這個rk3568開發板是筆者去年8月份網上沖浪購買的,4GB+32GB開發板 + 一塊10.1英寸的MIPI屏幕 + 電源適配器 + usb調試器(搞開源鴻蒙用不上) 一共 739米 。筆者認為是性價比無敵的開源鴻蒙標準系統開發板。

[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

觸覺智能一直在給 IDO-EVB3568-V1 開發板適配最新的OpenHarmony版本。例如2月1號發布Beta5,作為消費者的筆者立馬收到了適配了IDO-EVB3568-V1的Beta5鏡像包,有MIPI版本的和HDMI版本。購買后的體驗是非常不錯的。購買鏈接如下:https://item.taobao.com/item.htm?spm=4645b.1.14.1.5c4a4a7dv1soeZ&id=658789039056&ns=1&abbucket=5#detail。

[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

(2)樣例工程運行

1、樣例安裝運行后,觸覺智能 IDO-EVB3568-V1開發板顯示如下:

[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

以下圖片通過OpenHarmony預置的屏幕截圖功能獲取。截圖文件放在下面這四個文件夾下:

/data/service/el2/100/hmdfs/account/files/Pictures/Screenshots/

/storage/media/100/local/files/Pictures/Screenshots/

/mnt/hmdfs/100/account/device_view/local/files/Pictures/Screenshots/

/mnt/hmdfs/100/account/merge_view/files/Pictures/Screenshots/

然后通過hdc工具導出到PC端。

2、再點擊中間的"導出對象"后,PC端DevEco Studio工具的Log窗口查看到對應的調試信息。

系統的調試信息也在Hilog窗口顯示,且信息量大,不方便查看自己的調試信息,可以在log窗口設置過濾信息,讓窗口只顯示我們過濾關鍵字NapiTest的信息。

[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

調試信息如下:

08-05 11:09:03.413 1802-1802/com.example.objectwraptest I A0fefe/JsApp: 
[NapiTest] Test NAPI 2 + 3 = 5
08-05 11:09:03.414 1802-1802/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest] Test NAPI add(2, 3) 1
08-05 11:09:03.414 1802-1802/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest] Test NAPI add(2, 3) 2
08-05 11:09:03.415 1802-1802/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest] Test NAPI add(2, 3) 3
08-05 11:09:03.415 1802-1802/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest]Test NAPI 2+3 = 5
08-05 11:09:52.123 1802-1802/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest] Test NAPI 2 + 3 = 5
08-05 11:09:52.123 1802-1802/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest] Test NAPI add(0, 0) 1
08-05 11:09:52.123 1802-1802/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest] Test NAPI add(0, 0) 2
08-05 11:09:52.124 1802-1802/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest] Test NAPI add(0, 0) 3
08-05 11:09:52.124 1802-1802/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest]Test NAPI 4+5 = 0

3、再在index.ets中取消下面這四行代碼的注釋。

[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

Hilog窗口打印調試信息如下:

[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

08-05 09:03:38.156 1911-1911/com.example.objectwraptest I A0fefe/JsApp: 
[NapiTest] Test NAPI 2 + 3 = 5
08-05 09:03:38.157 1911-1911/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest]Test NAPI error{}
08-05 09:03:38.157 1911-1911/com.example.objectwraptest I A0fefe/JsApp:
[NapiTest]Test NAPI hello NapiTest = undefined

以上HiLog窗口打印信息中的com.example.objectwraptest是樣例工程的包名,在樣例應用工程AppScope\app.json5文件中定義。AppScope\app.json5中還可以定義樣例應用hap的其他屬性。

entry\src\main\module.json5中startWindowBackground字段可以查看應用開啟時過渡動畫的顏色,但是在指向的同級目錄下具體的文件中設置。

[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

在樣例應用工程entry\src\main\resources\base\element\string.json中可以查看 應用名稱

樣例圖標修改entry\src\main\resources\base\media\icon.png,大小是114*114像素

知識點附送

OpenHarmony截屏命令:

# 進入sdk\版本號\toolchain輸入cmd打開命令行
hdc_std shell
snapshot_display
# 截圖默認保存在/data/目錄下
exit
hdc_std file recv OpenHarmony設備端截圖文件路徑 PC端路徑

[觸覺智能RK3568使用體驗]NAPI 類對象導出及其生命周期管理(上)-開源基礎軟件社區

文章相關附件可以點擊下面的原文鏈接前往下載

 https://ost.51cto.com/resource/2513

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2023-03-16 15:29:57

鴻蒙工具

2023-03-13 15:18:04

NDK工具

2023-03-16 15:37:48

像素密度觸覺智能

2023-03-03 21:36:02

鴻蒙操作系統

2022-04-25 09:10:50

RK3568鴻蒙

2013-08-19 17:03:00

.Net生命周期對象

2012-06-20 10:29:16

敏捷開發

2021-07-19 05:52:29

網絡生命周期網絡框架

2023-03-07 15:54:45

鴻蒙Mesa庫

2009-06-17 15:06:50

Hibernate實體

2023-12-18 08:24:56

ViewModel數據操作Android

2012-04-28 13:23:12

Java生命周期

2013-07-29 05:11:38

iOS開發iOS開發學習類的'生命周期'

2015-07-08 16:28:23

weak生命周期

2019-03-25 11:25:40

聯想

2023-05-05 16:32:50

SveltosKubernetes集群

2022-02-17 08:02:45

對象存儲RGW

2009-05-21 09:12:41

Java開發平臺生命周期管理

2010-12-03 12:22:02

局域網文檔文檔安全數據保護

2022-06-01 09:25:16

嵌套生命周期智能技術工業資產
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品视频在线免费观看 | 91亚洲精品在线观看 | 中文精品久久 | 91精品久久久久久久久中文字幕 | 日本91av视频| 四虎最新地址 | 欧美一级片在线观看 | 亚洲视频在线一区 | 免费黄色的视频 | 亚洲成人精品在线观看 | 国产精品国产三级国产aⅴ入口 | 在线免费观看黄a | 成人欧美一区二区三区色青冈 | 狠狠影院 | 久久精品无码一区二区三区 | 最新日韩欧美 | 黄网免费 | 国产成人自拍一区 | 国产成人在线视频免费观看 | 亚洲天堂影院 | 蜜桃官网 | 婷婷精品| 日韩av一区二区在线观看 | 国产999在线观看 | 亚洲成人av一区二区 | 欧美日韩三区 | 亚洲精品99久久久久久 | 一区二区精品视频 | 成人在线免费观看 | 免费高清成人 | 国产我和子的乱视频网站 | 久久精品16 | 日日摸夜夜添夜夜添特色大片 | 精品在线一区二区 | 国产激情一区二区三区 | 日日夜夜精品视频 | 亚洲综合婷婷 | 99精品免费久久久久久久久日本 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 国产精品日韩一区二区 | 天天干天天玩天天操 |