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

OpenHarmony 的UI開發框架—ACE代碼框架總結

系統 OpenHarmony
本文簡單介紹了一個ACE組件從前端的頁面描述,到中間層三棵樹的創建和屬性傳遞,以及最終進行UI布局和繪制的整個過程。

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

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

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

一、ACE_Engine框架概述:

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

ACE_Engine提供的組件分為兩種類型,即:類Web開發范式類型和聲明式開發范式類型。其中類Web開發范式中定義一個頁面需要三個文件,html,css和js文件。html文件負責頁面布局,css文件負責定義組件的樣式,js文件負責業務邏輯實現。而聲明式范式僅需要1個ets文件,頁面布局和組件的樣式以及業務邏輯實現都在此文件中。

如圖:

ACE代碼框架總結-開源基礎軟件社區

二、ACE_Engine框架模塊劃分

對于類Web開發范式組件,根據組件從前端到后端的過程,可以將整個框架劃分為JsFrameWork,DomNode, ComPonent, RenderNode四個模塊。
其作用分別如下:

1、JsFrameWork:

負責解析前端html和css文件,創建出DomNode樹。該樹的結構和前端頁面是一一對應的。

2、DomNode:

負責將Dom樹轉換為Component樹。注意一個Dom節點轉換過后的Component節點實際上并不是一個單獨的節點,而是一顆以rootComponent為跟節點的組件樹。該樹中逐層包裹了對應的功能組件,最內部才是真正的主節點(這樣的作用是功能解耦合,將某一特定的功能放到對應的組件中去)。如BoxComponet負責組件的邊框繪制,DisplayComponent負責組件透明度繪制,TouchComponent負責組件觸摸時間的處理等。一個詳細過程見DOMNode::GenerateComponentNode函數。

3、ComPonent:

負責將Component樹中所有繼承自RenderComponent的節點(可繪制節點)創建對應的RendNode節點,生成對應的RendNode樹。見RenderComponent ::CreateRenderNode虛函數,

4、RenderNode:

RenderNode即可繪制的節點,負責組件的最終布局和繪制。其中布局函數為PerformLayout虛函數,由每個組件對應的實現類Render類來實現。繪制函數為Paint虛函數,由每個組件對應的子類FlutterRender類來實現。

對于聲明式開發范式組件,根據組件從前端到后端的過程,可以將整個框架劃分為EtsLoader,JsView, ComPonent, RenderNode四個模塊。
其作用分別如下:?

1、EtsLoader

負責解析ets頁面,根據組件的tag標簽創建對應的JsView對象,生成jsView樹。

2、JsView

負責處理組件的屬性,方法和事件。并通過Create函數創建對應的Component樹。

3、ComPonent:

同Web開發范式組件中的Component

4、RenderNode:

同Web開發范式組件中的RenderNode

各模塊創建示意圖如下圖所示:

ACE代碼框架總結-開源基礎軟件社區


各模塊見的調用關系及主要函數如下:

ACE代碼框架總結-開源基礎軟件社區

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

1.組件的屬性和樣式是保存在前端頁面的,通過JsframeWork解析頁面,并調用JsEngine的CreateDomNode接口創建Dom節點的同時傳遞新節點屬性和樣式。如果頁面中屬性樣式發生變化,則單獨調用SetAttr或SetStyle來更新屬性和樣式。

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

3.DomNode調用對應Component類的Set***函數,將所有屬性和樣式設置到Component中。

4.RenderNode創建后,會調用其Update函數。該函數內調用對應Component的Get***函數,來接收組件的所有屬性和樣式。

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

ACE代碼框架總結-開源基礎軟件社區

四、總結

ACE_Engine框架整體代碼較復雜,涉及的類也比較多。本文簡單介紹了一個ACE組件從前端的頁面描述,到中間層三棵樹的創建和屬性傳遞,以及最終進行UI布局和繪制的整個過程。該過程簡單總結一下就是:JS頁面 —> Dom樹 —> Component樹 —> Render樹,最后繪制Render樹。大家只要理解這個基本過程,在結合代碼關注重點流程。相信一定能夠對ACE_Engine框架的代碼有整體的理解。再此基礎上可以進行ACE組件的增強功能開發,包括新增一個ACE組件等。

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

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

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

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

2021-08-09 14:32:34

鴻蒙HarmonyOS應用

2022-10-20 16:40:16

JS應用控制LED鴻蒙

2022-04-18 10:47:55

UI框架鴻蒙操作系統

2021-08-30 18:09:57

鴻蒙HarmonyOS應用

2022-05-05 15:16:01

ACE鴻蒙

2022-04-01 15:18:04

HarmonyHDF 驅動鴻蒙

2020-11-13 18:59:51

UIAndroidJetBrains

2021-08-16 15:49:31

開發框架單線程異步

2022-04-07 15:41:36

PythonWeb 開發框

2021-08-10 09:31:54

鴻蒙HarmonyOS應用

2010-09-25 13:09:39

UISymbian

2021-10-18 10:14:26

鴻蒙HarmonyOS應用

2021-05-07 09:35:30

鴻蒙HarmonyOS應用

2012-09-18 09:20:06

2023-05-08 15:59:27

UI自動化腳本鴻蒙

2012-03-12 15:36:29

Java框架

2022-04-21 11:26:31

鴻蒙操作系統

2009-04-21 08:46:02

GoogleAndroid移動OS

2022-07-27 10:36:13

前端UI框架

2019-01-31 11:11:30

前端開發框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美激情在线精品一区二区三区 | 天天摸天天干 | 亚洲精品久久久久久宅男 | 91精品国产高清一区二区三区 | 欧美激情国产日韩精品一区18 | 亚洲精品一区中文字幕乱码 | 国产日韩欧美激情 | 国产精品美女久久久久aⅴ国产馆 | 亚洲精品久久久久中文字幕欢迎你 | 神马久久久久久久久久 | 亚洲欧美日韩精品久久亚洲区 | 久久精品久久久久久 | 中文字幕亚洲一区二区三区 | 国产成人午夜高潮毛片 | 夜夜爽99久久国产综合精品女不卡 | 精品1区2区3区 | 小川阿佐美pgd-606在线 | 精品欧美黑人一区二区三区 | www.色综合 | 国产大片一区 | 精品国产aⅴ | 天天操一操 | 四虎影院在线免费观看 | 精品乱码一区二区 | 久久中文字幕视频 | 亚洲一区国产精品 | 欧美aⅴ | 精品日韩一区二区 | 亚洲一区二区三区视频免费观看 | 成人精品国产免费网站 | 亚洲啊v在线 | 久久激情视频 | 亚洲激情视频在线 | 亚洲欧美中文日韩在线v日本 | 亚洲成人黄色 | 日韩美女爱爱 | 欧美一区二区三 | 麻豆国产精品777777在线 | 欧美淫 | 精品国产乱码久久久久久牛牛 | 国产精品久久久久久影院8一贰佰 |