0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙ACE開發(fā)框架總結(jié)

OpenHarmony技術(shù)社區(qū) ? 來源:OST開源開發(fā)者 ? 作者:OST開源開發(fā)者 ? 2023-01-09 10:05 ? 次閱讀

ACE_Engine 框架是 OpenHarmony 的 UI 開發(fā)框架,提供開發(fā)者在進行應(yīng)用 UI 開發(fā)時所必需的各種組件,以及定義這些組件的屬性,樣式,事件及方法。通過這些組件可以很方便的進行 OpenHarmony 上 UI 應(yīng)用的開發(fā)。

ACE_Engine 框架概述

ACE_Engine 提供的組件分為兩種類型,即:類 Web 開發(fā)范式類型和聲明式開發(fā)范式類型。其中類 Web 開發(fā)范式中定義一個頁面需要三個文件,html,css 和 js 文件。

html 文件負(fù)責(zé)頁面布局,css 文件負(fù)責(zé)定義組件的樣式,js 文件負(fù)責(zé)業(yè)務(wù)邏輯實現(xiàn)。

而聲明式范式僅需要 1 個 ets 文件,頁面布局和組件的樣式以及業(yè)務(wù)邏輯實現(xiàn)都在此文件中。

如下圖:

311141fc-8f42-11ed-bfe3-dac502259ad0.png

ACE_Engine 框架模塊劃分

對于類 Web 開發(fā)范式組件,根據(jù)組件從前端到后端的過程,可以將整個框架劃分為 JsFrameWork,DomNode,ComPonent,RenderNode 四個模塊。

其作用分別如下:

①JsFrameWork

負(fù)責(zé)解析前端 html 和 css 文件,創(chuàng)建出 DomNode 樹。該樹的結(jié)構(gòu)和前端頁面是一一對應(yīng)的。

②DomNode

負(fù)責(zé)將 Dom 樹轉(zhuǎn)換為 Component 樹。注意一個 Dom 節(jié)點轉(zhuǎn)換過后的 Component 節(jié)點實際上并不是一個單獨的節(jié)點,而是一顆以 rootComponent 為跟節(jié)點的組件樹。

該樹中逐層包裹了對應(yīng)的功能組件,最內(nèi)部才是真正的主節(jié)點(這樣的作用是功能解耦合,將某一特定的功能放到對應(yīng)的組件中去)。

如 BoxComponet 負(fù)責(zé)組件的邊框繪制,DisplayComponent 負(fù)責(zé)組件透明度繪制,TouchComponent 負(fù)責(zé)組件觸摸時間的處理等。

一個詳細(xì)過程見 DOMNode::GenerateComponentNode 函數(shù)。

③ComPonent

負(fù)責(zé)將 Component 樹中所有繼承自 RenderComponent 的節(jié)點(可繪制節(jié)點)創(chuàng)建對應(yīng)的 RendNode 節(jié)點,生成對應(yīng)的 RendNode 樹。

見 RenderComponent ::CreateRenderNode 虛函數(shù)。

④RenderNode

RenderNode 即可繪制的節(jié)點,負(fù)責(zé)組件的最終布局和繪制。其中布局函數(shù)為 PerformLayout 虛函數(shù),由每個組件對應(yīng)的實現(xiàn)類 Render 類來實現(xiàn)。

繪制函數(shù)為 Paint 虛函數(shù),由每個組件對應(yīng)的子類 FlutterRender 類來實現(xiàn)。

對于聲明式開發(fā)范式組件,根據(jù)組件從前端到后端的過程,可以將整個框架劃分為 EtsLoader,JsView,ComPonent,RenderNode 四個模塊。

其作用分別如下:

①EtsLoader

負(fù)責(zé)解析 ets 頁面,根據(jù)組件的 tag 標(biāo)簽創(chuàng)建對應(yīng)的 JsView 對象,生成 jsView 樹。

②JsView

負(fù)責(zé)處理組件的屬性,方法和事件。并通過 Create 函數(shù)創(chuàng)建對應(yīng)的 Component 樹。

③ComPonent

同 Web 開發(fā)范式組件中的 Component。

④RenderNode

同 Web 開發(fā)范式組件中的 RenderNode。 各模塊創(chuàng)建示意圖如下圖所示:

312a91ca-8f42-11ed-bfe3-dac502259ad0.png

各模塊見的調(diào)用關(guān)系及主要函數(shù)如下:

31450564-8f42-11ed-bfe3-dac502259ad0.png

組件的屬性/樣式的傳遞過程

組件的屬性和樣式是保存在前端頁面的,通過 JsframeWork 解析頁面,并調(diào)用 JsEngine 的 CreateDomNode 接口創(chuàng)建 Dom 節(jié)點的同時傳遞新節(jié)點屬性和樣式。

如果頁面中屬性樣式發(fā)生變化,則單獨調(diào)用SetAttr或SetStyle來更新屬性和樣式。

DomNode 收到屬性和樣式之后,會將通用屬性保存在 Declation 類中,將組件特有的屬性通過 SetSpecialAttr 和 SetSpectialStyle 函數(shù)保存在自身。

DomNode 調(diào)用對應(yīng) Component 類的 Set*** 函數(shù),將所有屬性和樣式設(shè)置到 Component 中。

RenderNode 創(chuàng)建后,會調(diào)用其 Update 函數(shù)。

該函數(shù)內(nèi)調(diào)用對應(yīng) Component 的 Get*** 函數(shù),來接收組件的所有屬性和樣式。

PipeLine 中會遍歷每個 RenderNode 進行布局和繪制,此時,就依據(jù) RenderNode 中接收的屬性和樣式,進行布局并繪制。

316beca6-8f42-11ed-bfe3-dac502259ad0.png

總結(jié)

ACE_Engine 框架整體代碼較復(fù)雜,涉及的類也比較多。本文簡單介紹了一個 ACE 組件從前端的頁面描述,到中間層三棵樹的創(chuàng)建和屬性傳遞,以及最終進行UI布局和繪制的整個過程。

該過程簡單總結(jié)一下就是:JS 頁面→Dom 樹→Component 樹→Render 樹,最后繪制 Render 樹。

大家只要理解這個基本過程,在結(jié)合代碼關(guān)注重點流程。相信一定能夠?qū)?ACE_Engine 框架的代碼有整體的理解。在此基礎(chǔ)上可以進行 ACE 組件的增強功能開發(fā),包括新增一個 ACE 組件等。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    403

    瀏覽量

    17518
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3393

    瀏覽量

    42623
  • ACE
    ACE
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    10675
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2386

    瀏覽量

    42959
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3744

    瀏覽量

    16468

原文標(biāo)題:鴻蒙ACE開發(fā)框架總結(jié)

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【課程連載】高級硬件工程師張飛帶你學(xué)習(xí)鴻蒙驅(qū)動開發(fā)和系統(tǒng)燒錄

    的燒錄5、使用Hi3516DV300開發(fā)板搭載鴻蒙操作系統(tǒng)如何運行一個簡單的驅(qū)動程序6、Hi3516DV300開發(fā)板搭載鴻蒙操作系統(tǒng)對WiFi外設(shè)驅(qū)動程序調(diào)試
    發(fā)表于 09-17 09:36

    鴻蒙開發(fā)AI應(yīng)用(八)JS框架訪問內(nèi)核層

    + CSS + HTML的技術(shù)上進行,相關(guān)內(nèi)容可以回顧用鴻蒙開發(fā)AI應(yīng)用(五)UI篇。JS應(yīng)用開發(fā)框架原理在第六篇里,我們已經(jīng)體驗了一下使用JS
    發(fā)表于 02-06 19:36

    JS應(yīng)用開發(fā)框架組件

    應(yīng)用開發(fā)框架源代碼在/foundation/ace/ace_engine_lite下,目錄結(jié)構(gòu)如下圖所示:/foundation/ace/
    發(fā)表于 04-23 18:05

    openharmony ACE開發(fā)框架詳解

      ACE(Ability Cross-platform Environment)開發(fā)框架ACE框架的輕量實現(xiàn)。它可以提供一套跨平臺的類w
    發(fā)表于 04-07 14:52

    鴻蒙應(yīng)用開發(fā)的JS UI框架如何實現(xiàn)高德地圖的訪問?

    鴻蒙應(yīng)用,現(xiàn)在分為Java UI框架和Ark UI框架,其中JS UI開發(fā)框架Ark UI框架
    發(fā)表于 04-28 11:44

    一文總結(jié)ACE代碼框架

    一、前言ACE_Engine框架是OpenAtom OpenHarmony(簡稱“OpenHarmony”)的UI開發(fā)框架,為開發(fā)者提供在進
    發(fā)表于 01-10 11:09

    ACE代碼框架總結(jié)

    一.ACE_Engine框架概述:ACE_Engine框架是OpenHarmony 的UI開發(fā)框架
    發(fā)表于 03-22 09:11

    基于Struts框架和Procedure的Web開發(fā)模式

    介紹基于MVC設(shè)計模式的Struts框架的組成和實現(xiàn)原理,總結(jié)開發(fā)框架的應(yīng)用特點和開發(fā)步驟。在分析和比較其他基于Struts
    發(fā)表于 04-23 10:16 ?79次下載

    鴻蒙系統(tǒng)中JS框架的逐行分析

    其實是由 C++ 來承擔(dān)的。JavaScript 代碼只是其中的 ViewModel 層。 鴻蒙 JS 框架是零依賴的,只在開發(fā)打包過程中
    的頭像 發(fā)表于 10-21 14:37 ?2032次閱讀

    基于鴻蒙的JS框架ace_lite_jsfwk開發(fā)

    world 程序,還順手給鴻蒙文檔提了 2 個 PR。 當(dāng)然我最感興趣的就是鴻蒙的 JS 框架 ace_lite_jsfwk,從名字中可以看出來這是一個非常輕量級的
    的頭像 發(fā)表于 02-26 10:54 ?2893次閱讀
    基于<b class='flag-5'>鴻蒙</b>的JS<b class='flag-5'>框架</b><b class='flag-5'>ace</b>_lite_jsfwk<b class='flag-5'>開發(fā)</b>

    OpenHarmony源碼剖析之ACE(JavaScript運行環(huán)境初始化)

    ? 張亮亮 深圳開鴻數(shù)字產(chǎn)業(yè)發(fā)展有限公司 ??? 簡介 ? ? JS UI 框架引擎? ACE? 全稱 Ability Cross-platform Environment
    的頭像 發(fā)表于 11-18 10:40 ?5214次閱讀
    OpenHarmony源碼剖析之<b class='flag-5'>ACE</b>(JavaScript運行環(huán)境初始化)

    OpenHarmony ACE 代碼框架總結(jié)

    一:ACE_Engine框架概述: ACE_Engine框架是OpenHarmony 的UI開發(fā)框架
    的頭像 發(fā)表于 12-30 19:05 ?1215次閱讀

    一文總結(jié) ACE 代碼框架

    田可輝 鴻湖萬聯(lián)高級技術(shù)專家 鴻湖萬聯(lián)產(chǎn)品推薦官 一、前言 ACE_Engine框架是OpenAtom OpenHarmony(簡稱“OpenHarmony”)的UI開發(fā)框架,為
    的頭像 發(fā)表于 01-11 03:30 ?1868次閱讀

    鴻蒙開發(fā)用什么語言?

    兩種開發(fā)方向 我們常說鴻蒙開發(fā),但是其實鴻蒙開發(fā)分為兩個方向: 一個是系統(tǒng)級別的開發(fā),比如驅(qū)動,
    的頭像 發(fā)表于 01-30 16:12 ?1606次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>用什么語言?

    鴻蒙OS開發(fā)實例:【HarmonyHttpClient】網(wǎng)絡(luò)框架

    鴻蒙上使用的Http網(wǎng)絡(luò)框架,里面包含純Java實現(xiàn)的HttpNet,類似okhttp使用,支持同步和異步兩種請求方式;還有鴻蒙版retrofit,和Android版Retrofit相似的使用,解放雙手般優(yōu)雅使用注解、自動解析j
    的頭像 發(fā)表于 04-12 16:58 ?879次閱讀
    <b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發(fā)</b>實例:【HarmonyHttpClient】網(wǎng)絡(luò)<b class='flag-5'>框架</b>