自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

觸覺(jué)智能RK3568使用體驗(yàn)—NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)

系統(tǒng) OpenHarmony
Node.js Node-API為開(kāi)發(fā)者提供了一套C/C++ API用于開(kāi)發(fā)Node.js的Native擴(kuò)展模塊。從Node.js 8.0.0開(kāi)始,Node-API以實(shí)驗(yàn)性特性作為Node.js本身的一部分被引入,并且從Node.js 10.0.0開(kāi)始正式全面支持Node-API。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

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

寫在開(kāi)頭:

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

什么是Node.js Node-API 框架

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

本文以O(shè)penHarmony 3.2beta3源碼中的node.js三方庫(kù)為例,從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 組件提供的接口名與三方庫(kù)Node.js一致,目前支持部分接口,詳情見(jiàn)??libnapi.ndk.json??文件。

本篇是該系列文章的第5篇上半部分。有離北況歸的地方就一定會(huì)有樣例源碼,本文提供了一個(gè)IDE開(kāi)發(fā)的NAPI工程用來(lái)學(xué)習(xí)本篇知識(shí)點(diǎn),下半部分將對(duì)源碼進(jìn)行解析。通過(guò)本文您將熟悉:

  • NAPI 導(dǎo)出類對(duì)象
  • NAPI 對(duì)象生命周期管理

1、NAPI 類對(duì)象導(dǎo)出

OpenHarmony NAPI提供了一種“包裝”C ++類和實(shí)例的方法,以便JS應(yīng)用可以調(diào)用類的構(gòu)造函數(shù)和方法。

Node.js Node-API中關(guān)于導(dǎo)出類對(duì)象的內(nèi)容,參考鏈接 : https://nodejs.org/docs/latest-v14.x/api/n-api.html#n_api_object_wrap

(1)NAPI導(dǎo)出類對(duì)象流程

通過(guò)napi_define_class定義一個(gè)JS類。

  • 它包含了與 C++ 類對(duì)應(yīng)的構(gòu)造函數(shù)、靜態(tài)屬性、方法、實(shí)例屬性和方法。

通過(guò)napi_wrap將 C++ 實(shí)例綁定在 JS對(duì)象中。

  • 當(dāng) JS代碼調(diào)用構(gòu)造函數(shù)時(shí),構(gòu)造函數(shù)回調(diào)會(huì)使用napi_wrap將一個(gè)新的 C++ 實(shí)例綁定在 JS對(duì)象中,然后返回綁定的C++ 實(shí)例。

通過(guò)napi_unwrap獲取作為調(diào)用目標(biāo)的C++ 實(shí)例。

  • 當(dāng) JS調(diào)用C++ 類 的方法或?qū)傩詴r(shí),會(huì)調(diào)用相應(yīng)的napi_callback C++ 函數(shù)。對(duì)于實(shí)例回調(diào),napi_unwrap獲取作為調(diào)用目標(biāo)的 C++ 實(shí)例 。

這里的napi_callback C++ 函數(shù)是指被 Node.js Node-API調(diào)用的C++ 函數(shù)。


[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

2、NAPI 對(duì)象生命周期

程序的生命周期是指程序從啟動(dòng),運(yùn)行到結(jié)束的整個(gè)過(guò)程。

NAPI 對(duì)象的生命周期代表著從對(duì)象創(chuàng)建到釋放的整個(gè)過(guò)程,如下圖所示:

在ArkTS應(yīng)用啟動(dòng)時(shí)會(huì)加載NAPI模塊,而在NAPI模塊加載過(guò)程中會(huì)創(chuàng)建一個(gè)對(duì)象A提供給應(yīng)用使用,在應(yīng)用退出或者主動(dòng)釋放A對(duì)象前,A對(duì)象必須一直保持"活躍"狀態(tài)。從A對(duì)象創(chuàng)建到釋放的整個(gè)過(guò)程也代表著A對(duì)象的生命周期。

[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

以下是Node-API 中關(guān)于對(duì)象生命周期的解釋:

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

句柄是一個(gè)標(biāo)識(shí)符,是用來(lái)標(biāo)識(shí)對(duì)象的。

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

3、關(guān)于本文提供的樣例工程

本文提供了一個(gè)IDE開(kāi)發(fā)的NAPI工程用來(lái)學(xué)習(xí)NAPI 類對(duì)象導(dǎo)出和對(duì)象生命周期管理。

筆者運(yùn)行環(huán)境:

  • 觸覺(jué)智能 IDO-EVB3568-V1 開(kāi)發(fā)板
  • OpenHarmony 3.2Beta2
  • DevEco Studio 3.1.0.100

(1)觸覺(jué)智能 IDO-EVB3568-V1 開(kāi)發(fā)板

觸覺(jué)智能的這個(gè)rk3568開(kāi)發(fā)板是筆者去年8月份網(wǎng)上沖浪購(gòu)買的,4GB+32GB開(kāi)發(fā)板 + 一塊10.1英寸的MIPI屏幕 + 電源適配器 + usb調(diào)試器(搞開(kāi)源鴻蒙用不上) 一共 739米 。筆者認(rèn)為是性價(jià)比無(wú)敵的開(kāi)源鴻蒙標(biāo)準(zhǔn)系統(tǒng)開(kāi)發(fā)板。

[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

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

[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

(2)樣例工程運(yùn)行

1、樣例安裝運(yùn)行后,觸覺(jué)智能 IDO-EVB3568-V1開(kāi)發(fā)板顯示如下:

[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

以下圖片通過(guò)OpenHarmony預(yù)置的屏幕截圖功能獲取。截圖文件放在下面這四個(gè)文件夾下:

/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/

然后通過(guò)hdc工具導(dǎo)出到PC端。

2、再點(diǎn)擊中間的"導(dǎo)出對(duì)象"后,PC端DevEco Studio工具的Log窗口查看到對(duì)應(yīng)的調(diào)試信息。

系統(tǒng)的調(diào)試信息也在Hilog窗口顯示,且信息量大,不方便查看自己的調(diào)試信息,可以在log窗口設(shè)置過(guò)濾信息,讓窗口只顯示我們過(guò)濾關(guān)鍵字NapiTest的信息。

[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

調(diào)試信息如下:

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中取消下面這四行代碼的注釋。

[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

Hilog窗口打印調(diào)試信息如下:

[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

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是樣例工程的包名,在樣例應(yīng)用工程AppScope\app.json5文件中定義。AppScope\app.json5中還可以定義樣例應(yīng)用hap的其他屬性。

entry\src\main\module.json5中startWindowBackground字段可以查看應(yīng)用開(kāi)啟時(shí)過(guò)渡動(dòng)畫的顏色,但是在指向的同級(jí)目錄下具體的文件中設(shè)置。

[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

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

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

知識(shí)點(diǎn)附送

OpenHarmony截屏命令:

# 進(jìn)入sdk\版本號(hào)\toolchain輸入cmd打開(kāi)命令行
hdc_std shell
snapshot_display
# 截圖默認(rèn)保存在/data/目錄下
exit
hdc_std file recv OpenHarmony設(shè)備端截圖文件路徑 PC端路徑

[觸覺(jué)智能RK3568使用體驗(yàn)]NAPI 類對(duì)象導(dǎo)出及其生命周期管理(上)-開(kāi)源基礎(chǔ)軟件社區(qū)

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載

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

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

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

責(zé)任編輯:jianghua 來(lái)源: 51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2023-03-16 15:29:57

鴻蒙工具

2023-03-13 15:18:04

NDK工具

2023-03-16 15:37:48

像素密度觸覺(jué)智能

2023-03-03 21:36:02

鴻蒙操作系統(tǒng)

2022-04-25 09:10:50

RK3568鴻蒙

2013-08-19 17:03:00

.Net生命周期對(duì)象

2023-03-07 15:54:45

鴻蒙Mesa庫(kù)

2012-06-20 10:29:16

敏捷開(kāi)發(fā)

2021-07-19 05:52:29

網(wǎng)絡(luò)生命周期網(wǎng)絡(luò)框架

2009-06-17 15:06:50

Hibernate實(shí)體

2012-04-28 13:23:12

Java生命周期

2023-12-18 08:24:56

ViewModel數(shù)據(jù)操作Android

2013-07-29 05:11:38

iOS開(kāi)發(fā)iOS開(kāi)發(fā)學(xué)習(xí)類的'生命周期'

2023-05-05 16:32:50

SveltosKubernetes集群

2015-07-08 16:28:23

weak生命周期

2023-08-18 14:34:09

HDF驅(qū)動(dòng)框架

2022-02-17 08:02:45

對(duì)象存儲(chǔ)RGW

2019-03-25 11:25:40

聯(lián)想

2022-06-01 09:25:16

嵌套生命周期智能技術(shù)工業(yè)資產(chǎn)

2009-05-21 09:12:41

Java開(kāi)發(fā)平臺(tái)生命周期管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)