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

OpenHarmony NAPI模塊注冊流程介紹

系統(tǒng) OpenHarmony
本次我們針對NAPI模塊注冊流程做深入介紹,給大家后續(xù)工作中開發(fā)、使用NAPI接口提供指導(dǎo)。

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

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

https://ost.51cto.com

前言

關(guān)于NAPI接口相關(guān)知識,之前我們介紹過NAPI同步異步接口使用方法、應(yīng)用啟動觸發(fā)的ArkUI ets_runtime啟動流程,從NAPI使用到整體流程給大家做了介紹,本次我們針對NAPI模塊注冊流程做深入介紹,給大家后續(xù)工作中開發(fā)、使用NAPI接口提供指導(dǎo)。

一、模塊注冊簡介

NAPI模塊注冊是在系統(tǒng)框架層 與 應(yīng)用層的相互配合下完成的,下面簡要介紹一下大致流程。

OpenHarmony NAPI模塊注冊流程介紹-開源基礎(chǔ)軟件社區(qū)

首先,提供NAPI接口定義給應(yīng)用層,一般是打包到SDK中,供應(yīng)用開發(fā)者查詢使用;

其次,NAPI接口在框架層實(shí)現(xiàn)其業(yè)務(wù)邏輯代碼后,

最后,在編譯腳本中定義模塊對外接口方法,可以是靜態(tài)庫或者動態(tài)庫,也可以是可執(zhí)行文件方式,當(dāng)前OpenHarmony庫中NAPI模塊,大多通過動態(tài)庫方式加載。

OpenHarmony NAPI模塊注冊流程介紹-開源基礎(chǔ)軟件社區(qū)

對于應(yīng)用層,首先引用需要的NAPI所在的庫名,然后通過庫名調(diào)用模塊內(nèi)相應(yīng)的接口;

OpenHarmony NAPI模塊注冊流程介紹-開源基礎(chǔ)軟件社區(qū)

上面我們簡要介紹了NAPI模塊注冊的流程,接下來我們對應(yīng)用層如何觸發(fā)NAPI模塊加載、模塊注冊,以及系統(tǒng)框架層在收到加載、注冊請求后如何處理,進(jìn)而調(diào)用到引擎層面。

二、注冊流程詳解

1、模塊注冊

OpenHarmony NAPI模塊注冊流程介紹-開源基礎(chǔ)軟件社區(qū)

Ability線程初始化

應(yīng)用hap包安裝到設(shè)備后,啟動應(yīng)用程序時(shí),通過foundation進(jìn)程fork出應(yīng)用進(jìn)程,應(yīng)用進(jìn)程的主線程,根據(jù)包中的應(yīng)用類型(FA或Stage)、 UI風(fēng)格(js或ets)初始化Ability,我們以FA模型、ets UI為例,展開描述。

Ability初始化時(shí),會判斷當(dāng)前Ability類型(AceAbility、PageAbility、ServiceAblity等),進(jìn)而調(diào)用相應(yīng)類型Ability的初始化,在AceAbility初始化時(shí),需要先創(chuàng)建AceContainer,后續(xù)可以通過AceContainer獲取包信息、窗口信息。

創(chuàng)建AceContainer時(shí),需要初始化UI前端,以及初始化引擎,引擎初始化時(shí),前端會拉起js線程,進(jìn)而進(jìn)入U(xiǎn)I后端引擎初始化流程。

js線程初始化

js線程進(jìn)行后端引擎初始化時(shí),首先進(jìn)行js Runtime初始化,在運(yùn)行環(huán)境中創(chuàng)建js虛擬機(jī)vm,根據(jù)虛擬機(jī)創(chuàng)建NativeEngine。
NativeEgine會根據(jù)后端引擎類型,調(diào)用相應(yīng)的子類NativeEgine,目前標(biāo)準(zhǔn)系統(tǒng)支持的后端引擎:QuickJS引擎、Ark引擎,編譯選項(xiàng)可自定義引擎類型,此處我們以ark引擎為例講解。

應(yīng)用代碼中的:

import XXX from "@ohos.xxx"

經(jīng)過前端處理打包后,生成的代碼為映射為:

globalThis.requireNapi("xxx")

創(chuàng)建后端ark引擎時(shí),會定義requireNapi接口,接口中通過模塊管理器加載模塊。
加載模塊時(shí),首先從緩存中查找已加載的模塊是否匹配,首次加載的模塊緩存中是不存在的,查找失??;
緩存中查找失敗后,則從硬盤中加載,首次加載均是從硬盤加載。
庫加載成功后,根據(jù)已加載的nativeModule回調(diào)NAPI模塊注冊時(shí)定義的回調(diào)函數(shù)。

2、模塊選擇

模塊選擇時(shí),首先從緩存的已加載模塊中匹配是否存在需要的模塊,若存在則直接用緩存的進(jìn)行后續(xù)接口查找;

否則從硬盤中加載庫,根據(jù)注冊信息獲取模塊信息;

(1)FindNativeModuleByCache

OpenHarmony NAPI模塊注冊流程介紹-開源基礎(chǔ)軟件社區(qū)

從緩存中查找模塊時(shí),根據(jù)import模塊名查找是否被load過(nm_modname),若查找不成功,則從硬盤中加載庫;
否則,繼續(xù)檢查模塊是否被加載過,若被加載過,則返回模塊信息,進(jìn)行后續(xù)接口處理;若未被加載,則要查找的模塊插入已加載模塊鏈表尾部;進(jìn)行后續(xù)從硬盤中加載庫;

(2)FindNativeModuleByDisk

OpenHarmony NAPI模塊注冊流程介紹-開源基礎(chǔ)軟件社區(qū)

從硬盤中加載庫時(shí),首先調(diào)用GetNativeModulePath獲取對應(yīng)的庫路徑,選路徑時(shí),首先將要查找的庫名進(jìn)行小寫處理,然后獲取匹配首選路徑、備選路徑(首先路徑_napi),然后依次匹配,若查找成功,則會調(diào)用dlopen打開庫,首次dlopen時(shí),會調(diào)用庫的構(gòu)造回調(diào)進(jìn)行已加載模塊注冊處理,將模塊信息寫到已加載模塊鏈表中;

至此模塊注冊、查找流程結(jié)束。

總結(jié)

本文介紹了NAPI模塊注冊流程,后續(xù)大家開發(fā)中需要注意以下幾點(diǎn):

1.庫名一定要小寫。

2.模塊名與庫名要一致,大小寫可不一致。

3.庫名AA、AA_napi均能匹配成功,優(yōu)先匹配AA。

4.應(yīng)用首次調(diào)用接口時(shí)觸發(fā)模塊注冊。

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

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

https://ost.51cto.com

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

2024-01-03 15:41:49

2022-05-10 11:02:02

電話子系統(tǒng)鴻蒙

2022-10-11 15:04:28

NAPI開發(fā)鴻蒙

2021-09-16 15:08:08

鴻蒙HarmonyOS應(yīng)用

2021-12-08 15:07:51

鴻蒙HarmonyOS應(yīng)用

2023-07-17 16:13:21

組件模塊開發(fā)的鴻蒙

2021-12-06 06:19:03

鴻蒙HarmonyOS應(yīng)用

2022-07-19 20:04:31

NAPI模塊鴻蒙

2022-05-12 14:42:17

項(xiàng)目開發(fā)Napi實(shí)現(xiàn)

2021-12-02 10:05:01

鴻蒙HarmonyOS應(yīng)用

2023-04-04 09:15:10

NAPI 框架鴻蒙

2023-06-20 15:45:15

服務(wù)卡片鴻蒙

2009-12-24 10:09:33

WPF事件注冊

2021-12-14 14:45:38

鴻蒙HarmonyOS應(yīng)用

2022-01-12 14:45:26

鴻蒙HarmonyOS應(yīng)用

2023-10-08 15:19:40

2021-06-28 09:38:50

鴻蒙HarmonyOS應(yīng)用

2023-06-01 15:37:14

鴻蒙社區(qū)新流程

2014-09-25 15:27:28

微信企業(yè)號注冊流程

2009-09-07 10:36:25

思科CCNA證書CCNA注冊方法
點(diǎn)贊
收藏

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