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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

全面解讀HarmonyOS新一代UI框架

電子發(fā)燒友開源社區(qū) ? 來源:HarmonyOS開發(fā)者 ? 作者:yuzhiqiang ? 2021-10-29 10:21 ? 次閱讀

作者:yuzhiqiang,UI編程框架首席技術(shù)專家

Harmony 3.0.0開發(fā)者預覽版中,包含了新一代的聲明式UI框架ArkUI 3.0、多語言跨平臺編譯器ArkCompiler 3.0、跨端開發(fā)工具DevEco Studio3.0,以及基于TS/JS語言的API 7,全面提升開發(fā)者體驗。

本期,我們要為大家重點介紹HarmonyOS新一代聲明式UI框架ArkUI 3.0。

一、UI編程框架

在介紹ArkUI 3.0之前,我們先來簡要了解一下什么是UI編程框架。

UI編程框架,是為應用開發(fā)者提供的開發(fā)UI的基礎設施,主要包括UI控件(按鈕/列表等),視圖布局(擺放/排列相應的UI控件),動畫機制(動畫設計以及效果呈現(xiàn)),交互事件處理(點擊/滑動等),以及相應的編程語言和編程模型等。從系統(tǒng)運行的維度來看,UI編程框架也包括一個運行時,負責應用在系統(tǒng)中執(zhí)行時所需的資源加載、UI渲染和事件響應等。

總體而言,UI編程框架提供了開發(fā)以及運行UI界面所需要的框架能力,主要架構(gòu)如下圖所示:

78c1752e-385b-11ec-82a8-dac502259ad0.png

圖1 UI編程框架

開發(fā)模型:對開發(fā)者提供開發(fā)范式、UI控件/布局/動效/交互、編程語言等。它體現(xiàn)的是開發(fā)效率與難易程度。

運行框架:UI界面渲染及交互的基礎能力框架,包括相應的布局引擎、控件機制、動效引擎、事件機制、渲染管線等,并結(jié)合語言虛擬機和圖形引擎,將開發(fā)者的程序運行在具體系統(tǒng)平臺上。它體現(xiàn)的是應用運行的性能體驗。

平臺適配:承載框架的具體操作系統(tǒng)或平臺適配層。

UI編程框架的關(guān)鍵需求,主要有以下兩類:

(1)開發(fā)效率:包括代碼量、學習曲線、工具、社區(qū)、三方庫完備度等。

(2)性能體驗:包括啟動速度、幀率、響應時延、酷炫效果、資源占用等。

另外,隨著智能設備的急劇增長,UI編程框架還需要考慮如何更好地適配不同設備的差異性,包括設備形態(tài)差異(比如屏幕形狀、尺寸、分辨率、交互模式等),以及設備能力差異(比如內(nèi)存、CPU、GPU等)。

二、ArkUI框架的演進

為了更好地滿足開發(fā)效率和性能體驗等相關(guān)的需求, ArkUI 3.0綜合考慮了UI渲染以及語言和運行時,圍繞著極簡開發(fā)、高性能、跨設備跨平臺進一步演進。下圖描述了ArkUI整體架構(gòu)的演進:

7914dfac-385b-11ec-82a8-dac502259ad0.png

圖2 ArkUI框架演進

圖的左側(cè)是2020年發(fā)布的JS UI框架的架構(gòu)示意圖。它主要支持類Web的前端開發(fā)范式,通過DSL(domain-specific language,領域特定語言)轉(zhuǎn)換層,跨語言對接到聲明式UI后端引擎,并結(jié)合JS引擎完成整體UI渲染。圖的右側(cè)是新的ArkUI 3.0框架,主要有以下幾個關(guān)鍵的變化:

(1)引入了新一代的聲明式UI開發(fā)范式,實現(xiàn)極簡的UI描述語法。

(2)設計了統(tǒng)一的前后端扁平化渲染機制,進一步提升UI渲染的性能并降低內(nèi)存消耗。

(3)深度結(jié)合ArkCompiler 3.0的方舟編譯器和方舟運行時,提升語言的執(zhí)行性能和跨語言通信能力。

(4)在工具方面,針對新一代的聲明式UI開發(fā)范式構(gòu)建了新的編譯工具鏈和預覽引擎,提供了所見即所得的實時預覽機制。

另外,在ArkUI 3.0框架中,類Web范式會繼續(xù)保留,即類Web范式和新一代的聲明式UI范式都可以支持,可以各自獨立使用,但不能混用。

三、ArkUI 3.0的關(guān)鍵特性

接下來我們展開詳細介紹一下ArkUI 3.0的關(guān)鍵特性。

1. 新一代的聲明式UI開發(fā)范式

具體而言,ArkUI 3.0中的新一代聲明式UI開發(fā)范式,主要特征如下:

(1)基于TypeScript擴展的聲明式UI描述語法,提供了類自然語言的UI描述和組合。

(2)開箱即用的多態(tài)組件。多態(tài)是指UI描述是統(tǒng)一的,UI呈現(xiàn)在不同類型設備上會有所不同。比如Button組件在手機和手表會有不同的樣式和交互方式。

(3)多維度的狀態(tài)管理機制,支持靈活的數(shù)據(jù)驅(qū)動的UI變更。

下面我們以一個具體的示例來說明新一代聲明式UI開發(fā)范式的基本組成。如圖3所示的代碼示例,UI界面會顯示一個“Hello World”的文本和一個“Click me”按鈕。當用戶點擊“Click me”按鈕時,字符串變量myText的值會從“World”變?yōu)椤?a target="_blank">ACE”,文本最終顯示為“Hello ACE”。

797ea5c2-385b-11ec-82a8-dac502259ad0.png

圖3 聲明式UI開發(fā)范式的基本概念

以上示例中所包含的聲明式UI開發(fā)范式的基本組成說明如下:

裝飾器:用來裝飾類、結(jié)構(gòu)體、方法以及變量,賦予其特殊的含義,如上述示例中@Entry、@Component、@State都是裝飾器。@Component表示這是個自定義組件;@Entry則表示這是個入口組件;@State表示組件中的狀態(tài)變量,這個狀態(tài)變化會引起UI變更。

自定義組件:可復用的UI單元,可組合其它組件,如上述被@Component裝飾的struct Hello。

UI描述:聲明式的方式來描述UI的結(jié)構(gòu),如上述build()方法內(nèi)部的代碼塊。

內(nèi)置組件:框架中默認內(nèi)置的基礎和布局組件,可直接被開發(fā)者調(diào)用,比如示例中的Column、Text、Divider、Button。

事件方法:用于添加組件對事件的響應邏輯,統(tǒng)一通過事件方法進行設置,如跟隨在Button后面的onClick()。

屬性方法:用于組件屬性的配置,統(tǒng)一通過屬性方法進行設置,如fontSize()、width()、height()、color()等,可通過鏈式調(diào)用的方式設置多項屬性。

上述示例中,用@State裝飾過的變量myText,包含了一個基礎的狀態(tài)管理機制,即myText的值的變化,會引起相應的UI變更(Text組件)。ArkUI 3.0還提供多維度的狀態(tài)管理機制。和UI相關(guān)聯(lián)的數(shù)據(jù),不僅僅在組件內(nèi)使用,還可以在不同組件層級間傳遞,比如父子組件之間,爺孫組件之間,也可以是全局范圍內(nèi)的傳遞,還可以是跨設備傳遞。另外,從數(shù)據(jù)的傳遞形式來看,可以分為只讀的單向傳遞和可變更的雙向傳遞。開發(fā)者可以靈活的利用這些能力來實現(xiàn)數(shù)據(jù)和UI的聯(lián)動。

ArkUI采用嵌入式領域特定語言(embedded Domain Specific Language, eDSL)的形式,結(jié)合宿主語言能力實現(xiàn)UI開發(fā)。通過eDSL,結(jié)合語法糖或者語言原生的元編程能力,設計了統(tǒng)一的UI開發(fā)范式,并能夠結(jié)合不同語言來實現(xiàn)應用的邏輯處理部分。

2. 關(guān)鍵渲染性能

下面通過一個簡單的示例代碼,為大家講述從代碼到UI顯示的整體渲染流程。如圖4所示,此示例會在UI界面顯示一個“Click me”按鈕,按鈕下面同步顯示按鈕的點擊次數(shù)。當用戶點擊按鈕時,下面的點擊次數(shù)會相應增加。

79c70466-385b-11ec-82a8-dac502259ad0.png

圖4 整體渲染流程

整個渲染過程分為兩個階段:

(1)初始顯示流程(步驟①~⑤)

① 源代碼通過相應的工具鏈,編譯為帶有類型標志的目標文件,同時也包含了如何創(chuàng)建UI結(jié)構(gòu)信息的指令流。

② 通過跨語言調(diào)用并生成了C++層Component樹(UI描述層)。

③ 通過Component樹進一步生成Element樹。Element是Component的實例,表示一個具體的組件節(jié)點,它形成的Element樹負責維持界面在整個運行時的樹形結(jié)構(gòu),方便計算更新時的局部更新算法等。

④ 對于每個可顯示的Element都會為其創(chuàng)建對應的RenderNode。RenderNode負責一個節(jié)點的顯示信息,它形成的Render樹維護著整個界面渲染需要用到的信息,包括位置、大小、繪制命令等。后續(xù)的布局、繪制都是在Render樹上進行的。

⑤ 實現(xiàn)真正的渲染并顯示繪制結(jié)果。

(2)按鈕被點擊后的顯示流程(步驟⑥~?)

⑥ 點擊事件傳遞到組件,組件的onClick事件方法被觸發(fā)執(zhí)行。

⑦ 由于onClick事件方法中@State注解過的變量改變了,相應getter/setter函數(shù)會被觸發(fā)。

⑧ 狀態(tài)管理模塊定位出關(guān)聯(lián)的UI組件。

⑨ 狀態(tài)管理模塊更新相應的Element樹的信息。

⑩ 更新相應的UI組件的渲染信息。

? 界面顯示,與⑤類似。

整個渲染過程中所需的關(guān)鍵能力,除了極簡的開發(fā)范式本身,主要包含以下三個部分:

編譯優(yōu)化以及跨語言調(diào)用。結(jié)合目標文件中的類型信息標志,ArkCompiler會實現(xiàn)相應的代碼優(yōu)化。另外,ArkCompiler也提供了高效的JS/TS -》 C++跨語言調(diào)用機制。

扁平化渲染機制以及小對象組合機制。組件信息的結(jié)構(gòu)在前后端有基本一致的表示,進一步減少了轉(zhuǎn)換開銷,實現(xiàn)了扁平化的渲染。同時,UI組件內(nèi)部都是通過輕量化對象來按需組合,內(nèi)存消耗也進一步降低。

狀態(tài)管理機制。通過監(jiān)聽變量的存取操作,實現(xiàn)數(shù)據(jù)變化的自動化感知并計算出相應的最小化UI組件更新范圍,實現(xiàn)高效的UI變更。

除此之外,長列表渲染是一種典型的應用場景,里面可能會涉及到大量的數(shù)據(jù),如果處理不當,會引起極大影響性能以及資源占用。ArkUI 3.0針對這類常用的場景,提供了一種LazyForEach懶加載機制,會自動根據(jù)具體情況計算出合適的渲染數(shù)據(jù),實現(xiàn)數(shù)據(jù)的按需加載,從而提升UI刷新效率。LazyForEach可以結(jié)合常用的列表類組件(比如List、Grid等)靈活配合使用。

3. 高級UI組件庫高級的UI組件庫可以進一步助力高效的應用開發(fā)。HarmonyOS的歐洲研發(fā)團隊基于ArkUI 3.0,構(gòu)建了一些高階組件示例,比如:常用的圖表類組件、瀑布流布局組件等。開發(fā)者可以通過幾行代碼就可以實現(xiàn)復雜酷炫的UI效果,比如自適應的圖片增刪、行列變化,以及相應的酷炫動效效果。

4. 多設備開發(fā)

除了UI開發(fā)套件,ArkUI 3.0圍繞著多設備開發(fā),還提供了多維度的方案,進一步簡化開發(fā):

(1)基礎能力層:包括基礎的分層參數(shù)配置(比如色彩、字號、圓角、間距等),柵格系統(tǒng),原子化布局能力(比如拉伸、折行、隱藏等)。

(2)零部件組件層:包括多態(tài)控件,統(tǒng)一交互能力,以及在此基礎上的組件組合。

(3)面向典型場景:提供分類的頁面組合模板以及示例代碼。

關(guān)于多設備開發(fā),后面我們會有更詳細的文章介紹,請大家持續(xù)關(guān)注。

5. 實時預覽機制

整個開發(fā)流程中還有一個很重要的方面——預覽能力,即可以在PC上通過IDE(集成開發(fā)環(huán)境)就可以實時看到應用的渲染效果,而無需通過具體設備來部署運行。預覽的關(guān)鍵需求主要包括:

(1)一致性渲染:和目標設備一致的UI呈現(xiàn)效果。

(2)實時預覽&雙向預覽:改動相應的代碼,實時呈現(xiàn)出相應UI效果。另外,代碼能夠和UI雙向聯(lián)動,代碼改動的同時UI也實時變更,UI改動的同時代碼也相應地變更。

(3)多維度預覽:頁面級預覽、組件級預覽、多設備預覽。

以上這些能力都需要UI編程框架具備相應的基礎設施才能達成。ArkUI 3.0的預覽器的整體架構(gòu)如下圖所示:

79f930a8-385b-11ec-82a8-dac502259ad0.png

圖7 ArkUI 3.0的預覽器架構(gòu)

ArkUI 3.0基于底層的畫布通過自繪制實現(xiàn)了不同平臺上一致化的渲染體驗,并通過渲染側(cè)的跨平臺對接層完成了整體渲染效果。另外,ArkUI 3.0通過實時代碼變化檢測和增量編譯機制,再配合前面所提到的高效渲染性能,實現(xiàn)了實時編寫預覽。

通過ArkUI 3.0的基礎設施,結(jié)合IDE可視化工具(即預覽器前端),就實現(xiàn)了上面的實時預覽、雙向預覽等能力,進一步提升了開發(fā)者的開發(fā)效率。

四、結(jié)束語

總體而言,UI編程框架在應用開發(fā)中起了至關(guān)重要的作用。目前,擁有全新開發(fā)范式的新一代的UI框架——ArkUI 3.0走出了堅實的第一步,并已開始支撐更多的關(guān)鍵應用。接下來,除了基礎設施的持續(xù)完善,我們會重點支持生態(tài)擴展,主要包括高級UI能力的提升,比如三方地圖,游戲的融合,以及Web能力增強等。同時,我們也會圍繞跨設備、性能體驗持續(xù)地創(chuàng)新。歡迎廣大的開發(fā)者加入進來,一起探索,一起改進,共建萬物互聯(lián)的應用生態(tài)!未來,有跡可循!

編輯:jq

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

    關(guān)注

    0

    文章

    338

    瀏覽量

    46781
  • ui
    ui
    +關(guān)注

    關(guān)注

    0

    文章

    204

    瀏覽量

    21388
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1978

    瀏覽量

    30269

原文標題:HDC技術(shù)分論壇:HarmonyOS新一代UI框架的全面解讀

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    HarmonyOS開發(fā)指導類文檔更新速遞(上)

    、媒體相關(guān)能力新增、優(yōu)化文檔,方便開發(fā)者更加高效使用文檔。 ArkUI(方舟UI框架) ArkUI(方舟UI框架)是個簡潔、高性能、支持跨
    的頭像 發(fā)表于 12-30 09:50 ?88次閱讀
    <b class='flag-5'>HarmonyOS</b>開發(fā)指導類文檔更新速遞(上)

    HarmonyOS NEXT應用元服務開發(fā)Intents Kit(意圖框架服務)綜述

    、綜述 Intents Kit(意圖框架服務)是HarmonyOS級的意圖標準體系 ,意圖連接了應用/元服務內(nèi)的業(yè)務功能。 意圖框架能幫開發(fā)者將應用/元服務內(nèi)的業(yè)務功能,智能分發(fā)到各
    發(fā)表于 11-28 10:43

    中興努比亞、紅魔與京東方聯(lián)合發(fā)布全新一代全面

    近日,“全面好屏,全屏實力”全新一代全面屏交付儀式在成都隆重舉行,此次儀式由中興通訊旗下的努比亞、紅魔品牌與京東方聯(lián)合主辦,共同展示了他們在顯示技術(shù)領域的最新成果。 據(jù)了解,此次交付的全新一
    的頭像 發(fā)表于 11-06 11:02 ?634次閱讀

    HarmonyOS NEXT應用元服務開發(fā)Intents Kit(意圖框架服務)本地搜索方案概述

    、概述 本地搜索是在HarmonyOS化搜索特性,開發(fā)者將應用/元服務內(nèi)的功能和內(nèi)容通過意圖框架共享到HarmonyOS,即可實現(xiàn)“
    發(fā)表于 11-06 10:59

    新一代小米手機智能工廠全面量產(chǎn)

    在科技日新月異的今天,小米公司再次以實際行動詮釋了其對于智能制造的深刻理解和前瞻布局。近日,小米正式宣布其位于北京昌平的新一代小米手機智能工廠全面進入量產(chǎn)階段,標志著小米在智能制造領域的又
    的頭像 發(fā)表于 07-09 09:41 ?804次閱讀

    小米新一代智能手機智能工廠全面投產(chǎn)

    在科技日新月異的今天,小米再次以其前瞻性的布局和創(chuàng)新實力,引領智能制造的新紀元。7月8日,小米官方正式宣布,其新一代智能手機智能工廠全面投產(chǎn),這座被譽為行業(yè)標桿的全數(shù)字化智能工廠,不僅標志著小米在智能制造領域的重大突破,更是對未來手機生產(chǎn)模式的
    的頭像 發(fā)表于 07-08 15:23 ?585次閱讀

    學習鴻蒙必須要知道的幾個名詞

    HarmonyOS提供了UI(UserInterface,用戶界面)開發(fā)框架,即方舟開發(fā)框架(ArkUI
    的頭像 發(fā)表于 07-06 08:04 ?433次閱讀
    學習鴻蒙必須要知道的幾個名詞

    HarmonyOS NEXT Developer Beta1最新術(shù)語表

    服務 原名原子化服務,是HarmonyOS提供的種面向未來的服務提供方式,是有獨立入口的(用戶可通過點擊服務卡片打開元服務)、免安裝的(無需顯式安裝,由系統(tǒng)程序框架后臺安裝后即可使用)用戶應用程序形態(tài)
    發(fā)表于 06-27 16:16

    HarmonyOS NEXT Developer Beta1中的Kit

    HarmonyOS NEXT Developer Preview1(API 11)版本開始,HarmonyOS SDK以Kit維度提供豐富、完備的開放能力,涵蓋應用框架、系統(tǒng)、媒體、圖形、應用服務
    發(fā)表于 06-26 10:47

    鴻蒙OS開發(fā)實戰(zhàn):【自動化測試框架】使用指南

    為支撐HarmonyOS操作系統(tǒng)的自動化測試活動開展,我們提供了支持JS/TS語言的單元及UI測試框架,支持開發(fā)者針對應用接口進行單元測試,并且可基于UI操作進行
    的頭像 發(fā)表于 04-08 14:49 ?1441次閱讀
    鴻蒙OS開發(fā)實戰(zhàn):【自動化測試<b class='flag-5'>框架</b>】使用指南

    鴻蒙實戰(zhàn)開發(fā)ArkTS運用:【ai聊天框】

    個ArkTS編寫的HarmonyOS原生聊天UI框架,提供了開箱即用的聊天對話組件。
    的頭像 發(fā)表于 03-08 15:38 ?983次閱讀
    鴻蒙實戰(zhàn)開發(fā)ArkTS運用:【ai聊天框】

    HarmonyOS開發(fā)技術(shù)全面分析

    以應用遷移為例,簡要地展示了分布式任務調(diào)度能力。 圖4: 分布式任務調(diào)度示意圖 次開發(fā),多端部署 HarmonyOS 提供了用戶程序框架、 Ability 框架以及
    發(fā)表于 02-21 16:31

    微軟發(fā)布Agent框架UFO,引領UI交互新紀元

    微軟近日宣布推出全新的Agent框架——UFO(UI-Focused Agent),旨在構(gòu)建更智能、更直觀的用戶界面交互體驗。該框架基于OpenAI的GPT-4V圖像識別模型開發(fā),專為Windows操作系統(tǒng)上的應用程序設計,能夠
    的頭像 發(fā)表于 02-19 11:15 ?1214次閱讀

    HarmonyOS SDK,助力開發(fā)者打造煥然新的鴻蒙原生應用

    鴻蒙星河版重磅發(fā)布,帶來了全新架構(gòu)、全新體驗、全新生態(tài)。作為支撐鴻蒙原生應用開發(fā)的技術(shù)源動力,HarmonyOS SDK 將系統(tǒng)級能力全面對外開放,覆蓋了應用框架、應用服務、系統(tǒng)、媒體、圖形、AI
    發(fā)表于 01-19 10:31

    兆芯推出新一代桌面處理器開先KX-7000系列

    開先 KX-7000系列處理器采用新一代的“世紀大道”自主微架構(gòu),針對內(nèi)核前端設計、亂序執(zhí)行引擎及執(zhí)行單元、以及訪存層級結(jié)構(gòu)等方面,進行了全新的設計和全面的優(yōu)化。
    發(fā)表于 01-08 10:48 ?813次閱讀