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

OpenHarmony NAPI模塊注冊流程介紹

系統 OpenHarmony
本次我們針對NAPI模塊注冊流程做深入介紹,給大家后續工作中開發、使用NAPI接口提供指導。

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

51CTO 開源基礎軟件社區

https://ost.51cto.com

前言

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

一、模塊注冊簡介

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

OpenHarmony NAPI模塊注冊流程介紹-開源基礎軟件社區

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

其次,NAPI接口在框架層實現其業務邏輯代碼后,

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

OpenHarmony NAPI模塊注冊流程介紹-開源基礎軟件社區

對于應用層,首先引用需要的NAPI所在的庫名,然后通過庫名調用模塊內相應的接口;

OpenHarmony NAPI模塊注冊流程介紹-開源基礎軟件社區

上面我們簡要介紹了NAPI模塊注冊的流程,接下來我們對應用層如何觸發NAPI模塊加載、模塊注冊,以及系統框架層在收到加載、注冊請求后如何處理,進而調用到引擎層面。

二、注冊流程詳解

1、模塊注冊

OpenHarmony NAPI模塊注冊流程介紹-開源基礎軟件社區

Ability線程初始化

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

Ability初始化時,會判斷當前Ability類型(AceAbility、PageAbility、ServiceAblity等),進而調用相應類型Ability的初始化,在AceAbility初始化時,需要先創建AceContainer,后續可以通過AceContainer獲取包信息、窗口信息。

創建AceContainer時,需要初始化UI前端,以及初始化引擎,引擎初始化時,前端會拉起js線程,進而進入UI后端引擎初始化流程。

js線程初始化

js線程進行后端引擎初始化時,首先進行js Runtime初始化,在運行環境中創建js虛擬機vm,根據虛擬機創建NativeEngine。
NativeEgine會根據后端引擎類型,調用相應的子類NativeEgine,目前標準系統支持的后端引擎:QuickJS引擎、Ark引擎,編譯選項可自定義引擎類型,此處我們以ark引擎為例講解。

應用代碼中的:

import XXX from "@ohos.xxx"

經過前端處理打包后,生成的代碼為映射為:

globalThis.requireNapi("xxx")

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

2、模塊選擇

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

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

(1)FindNativeModuleByCache

OpenHarmony NAPI模塊注冊流程介紹-開源基礎軟件社區

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

(2)FindNativeModuleByDisk

OpenHarmony NAPI模塊注冊流程介紹-開源基礎軟件社區

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

至此模塊注冊、查找流程結束。

總結

本文介紹了NAPI模塊注冊流程,后續大家開發中需要注意以下幾點:

1.庫名一定要小寫。

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

3.庫名AA、AA_napi均能匹配成功,優先匹配AA。

4.應用首次調用接口時觸發模塊注冊。

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

51CTO 開源基礎軟件社區

https://ost.51cto.com

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

2024-01-03 15:41:49

2022-05-10 11:02:02

電話子系統鴻蒙

2022-10-11 15:04:28

NAPI開發鴻蒙

2021-09-16 15:08:08

鴻蒙HarmonyOS應用

2021-12-08 15:07:51

鴻蒙HarmonyOS應用

2021-12-06 06:19:03

鴻蒙HarmonyOS應用

2022-07-19 20:04:31

NAPI模塊鴻蒙

2023-07-17 16:13:21

組件模塊開發的鴻蒙

2022-05-12 14:42:17

項目開發Napi實現

2023-04-04 09:15:10

NAPI 框架鴻蒙

2023-06-20 15:45:15

服務卡片鴻蒙

2021-12-02 10:05:01

鴻蒙HarmonyOS應用

2021-12-14 14:45:38

鴻蒙HarmonyOS應用

2009-12-24 10:09:33

WPF事件注冊

2023-03-10 09:41:16

NAPI框架鴻蒙

2022-01-12 14:45:26

鴻蒙HarmonyOS應用

2023-06-01 15:37:14

鴻蒙社區新流程

2023-09-04 17:48:06

2021-06-28 09:38:50

鴻蒙HarmonyOS應用

2023-10-08 15:19:40

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品成人av| 国产精品爱久久久久久久 | 99re6在线视频精品免费 | 伊人精品国产 | www.youjizz.com日韩 | 久久精品国产一区二区三区不卡 | 一级黄色短片 | 99九色| 欧美精品一区二区在线观看 | 精品毛片在线观看 | 久久精品国产一区老色匹 | 色香蕉在线 | 午夜日韩 | 九九久久精品视频 | 国产精品美女久久久久久免费 | 欧美黄在线观看 | 久久精品国产免费看久久精品 | 国产精品99久久久久久久久 | 国产日韩欧美综合 | 日韩欧美一区二区三区 | 男女羞羞的网站 | 中文字幕在线观看视频一区 | 午夜精品一区 | 精品国产乱码一区二区三区a | 日本不卡一区 | 成人片免费看 | 亚洲精品一区二区三区 | 在线观看国产精品视频 | 久久久青草婷婷精品综合日韩 | 犬夜叉在线观看 | 美女福利视频 | 欧美成人免费在线 | 久久精品国产一区二区三区 | 欧美视频一区 | 亚洲一区二区精品视频在线观看 | 97天天干 | 成人午夜视频在线观看 | 一区二区三区视频在线免费观看 | 日韩av一区二区在线观看 | 亚洲欧美日韩高清 | 久草免费在线 |