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

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

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

鴻蒙ArkUI:【從代碼到UI顯示的整體渲染流程】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-13 16:06 ? 次閱讀

ArkUI

方舟開(kāi)發(fā)框架(簡(jiǎn)稱(chēng)ArkUI)是鴻蒙開(kāi)發(fā)的UI框架,提供如下兩種開(kāi)發(fā)范式,我們 只學(xué)聲明式開(kāi)發(fā)范式

  1. [基于ArkTS的聲明式開(kāi)發(fā)范式]
  2. [兼容JS的類(lèi)Web開(kāi)發(fā)范式]
  3. 開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

整體架構(gòu)圖

image.png

我們使用ArkTS寫(xiě)完頁(yè)面描述后,交給語(yǔ)言運(yùn)行時(shí)進(jìn)行語(yǔ)法解析,再之后由C++編寫(xiě)的后端引擎將UI轉(zhuǎn)換為渲染指令交給渲染引擎繪制到屏幕上

ArkUI語(yǔ)法初見(jiàn)

image.png

  1. ArkTS對(duì)TypeScript語(yǔ)言進(jìn)行擴(kuò)展,提供值類(lèi)型結(jié)構(gòu)struct。
  2. struct定義自定義組件,必須搭配Component或者CustomDialog使用
  3. ArkUI中組件定義和狀態(tài)管理都是通過(guò)裝飾器來(lái)做的。TS中的裝飾器主要有類(lèi)裝飾器、屬性裝飾器、方法裝飾器以及參數(shù)裝飾器四種
  4. 事件方法和屬性方法只是方法的入?yún)⒉灰粯?,一個(gè)是基本值或者表達(dá)式值,一個(gè)是函數(shù)。
  5. 在TS中函數(shù)我們就把函數(shù)當(dāng)成變量來(lái)用就行,只不過(guò)普通變量是存儲(chǔ)一個(gè)類(lèi)型的值,而函數(shù)用來(lái)存儲(chǔ)一個(gè)輸入到輸出的轉(zhuǎn)變過(guò)程
  6. 還記得我們上面說(shuō)的描述UI嘛,在這里就在build函數(shù)中描述。框架會(huì)自動(dòng)調(diào)用build,不需要我們手動(dòng)調(diào)用

從代碼到UI顯示的整體渲染流程

image.png

ArkUI的渲染分為兩大情況

從創(chuàng)建到顯示(①~⑤)

① 通過(guò)devEco將源碼編譯成帶類(lèi)型標(biāo)識(shí)的字節(jié)碼文件,同時(shí)攜帶創(chuàng)建這個(gè)結(jié)構(gòu)所需信息的指令流

② 通過(guò)跨語(yǔ)言調(diào)用生成C++層的Component樹(shù)。這一步只是把ArkTS描述轉(zhuǎn)變成了使用C++描述

③ 通過(guò)Component樹(shù)生成Element樹(shù),Element是Component的實(shí)例,用于表示一個(gè)具體的組件節(jié)點(diǎn)。界面在運(yùn)行時(shí)的樹(shù)形結(jié)構(gòu)就是通過(guò)Element樹(shù)來(lái)維持的,同時(shí)自動(dòng)更新的diff算法也是依賴(lài)Element樹(shù)來(lái)減少?gòu)?fù)雜度的

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

⑤ 實(shí)現(xiàn)真正的渲染并顯示繪制結(jié)果。HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿

搜狗高速瀏覽器截圖20240326151547.png

按鈕點(diǎn)擊到更新顯示(⑥~?)

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

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

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

⑨ 狀態(tài)管理模塊更新相應(yīng)的Element樹(shù)的信息

⑩ 更新相應(yīng)的UI組件的渲染信息

? 界面顯示,與⑤類(lèi)似

盒子模型

image.png

上面我們說(shuō)的布局原理,子視圖上報(bào)給父視圖自身大小的值是指 組件內(nèi)容區(qū)的大小

審核編輯 黃宇

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

    關(guān)注

    0

    文章

    206

    瀏覽量

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

    關(guān)注

    57

    文章

    2478

    瀏覽量

    43696
收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙ArkUI開(kāi)發(fā)學(xué)習(xí):【渲染控制語(yǔ)法】

    ArkUI開(kāi)發(fā)框架是一套構(gòu)建 HarmonyOS / OpenHarmony 應(yīng)用界面的聲明式UI開(kāi)發(fā)框架,它支持程序使用?`if/else`?條件渲染,?`ForEach`?循環(huán)渲染
    的頭像 發(fā)表于 04-09 16:40 ?1280次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>開(kāi)發(fā)學(xué)習(xí):【<b class='flag-5'>渲染</b>控制語(yǔ)法】

    鴻蒙ArkUI-X跨平臺(tái)開(kāi)發(fā):【SDK目錄結(jié)構(gòu)介紹】

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開(kāi)發(fā)框架擴(kuò)展不同的OS平臺(tái),比如Android和iOS平臺(tái),讓開(kāi)發(fā)者基于ArkUI,可復(fù)用大部分的應(yīng)用
    的頭像 發(fā)表于 05-20 16:28 ?1091次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>-X跨平臺(tái)開(kāi)發(fā):【SDK目錄結(jié)構(gòu)介紹】

    【HarmonyOS HiSpark AI Camera試用連載 】鴻蒙JS UI介紹

    設(shè)備顯示能力,運(yùn)行時(shí)自動(dòng)映射到不同設(shè)備類(lèi)型,開(kāi)發(fā)者無(wú)感知,降低開(kāi)發(fā)者多設(shè)備適配成本。高性能開(kāi)發(fā)框架包含了許多核心的控件,如列表、圖片和各類(lèi)容器組件等,針對(duì)聲明式語(yǔ)法進(jìn)行了渲染流程的優(yōu)化。整體
    發(fā)表于 01-11 20:10

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

    UI開(kāi)發(fā)。通過(guò)eDSL,結(jié)合語(yǔ)法糖或者語(yǔ)言原生的元編程能力,設(shè)計(jì)了統(tǒng)一的UI開(kāi)發(fā)范式,并能夠結(jié)合不同語(yǔ)言來(lái)實(shí)現(xiàn)應(yīng)用的邏輯處理部分。2. 關(guān)鍵渲染性能下面通過(guò)一個(gè)簡(jiǎn)單的示例代碼,為大家講
    發(fā)表于 10-26 18:48

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

    。通過(guò)eDSL,結(jié)合語(yǔ)法糖或者語(yǔ)言原生的元編程能力,設(shè)計(jì)了統(tǒng)一的UI開(kāi)發(fā)范式,并能夠結(jié)合不同語(yǔ)言來(lái)實(shí)現(xiàn)應(yīng)用的邏輯處理部分。2. 關(guān)鍵渲染性能下面通過(guò)一個(gè)簡(jiǎn)單的示例代碼,為大家講述
    發(fā)表于 11-22 16:51

    HDD杭州站?ArkUI讓開(kāi)發(fā)更靈活

    ArkUI的能力,給開(kāi)發(fā)者帶來(lái)了以下新的預(yù)覽體驗(yàn):● 亞秒級(jí)別實(shí)時(shí)預(yù)覽通過(guò)檢測(cè)最小更新代碼,進(jìn)行局部渲染更新,達(dá)到亞秒級(jí)的實(shí)時(shí)預(yù)覽能力。● UI界面與
    發(fā)表于 08-05 11:33

    本周四晚19:00知識(shí)賦能第八期第1課丨ArkUI框架整體設(shè)計(jì)

    UI繪制和渲染,只需聚焦應(yīng)用開(kāi)發(fā),從而實(shí)現(xiàn)極簡(jiǎn)高效地開(kāi)發(fā)。9月15日(本周四)晚上19:00,第8期第1節(jié)直播,巴延興老師在直播間與大家分享《ArkUI框架整體設(shè)計(jì)》——本次分享將介紹
    發(fā)表于 09-14 15:35

    ArkUI,更高效的框架設(shè)計(jì)

    ArkUI是一套用于構(gòu)建HarmonyOS應(yīng)用界面的UI開(kāi)發(fā)框架,本期我們將從架構(gòu)設(shè)計(jì)上來(lái)聊聊ArkUI的設(shè)計(jì)理念。 ArkUI架構(gòu)圖
    發(fā)表于 12-21 10:26

    ArkUI新能力,助力應(yīng)用開(kāi)發(fā)更便捷

    、@ObjectLink、@Builder機(jī)制支持動(dòng)態(tài)化增加組件能力并融合到現(xiàn)有的UI中,ArkUI提供加載運(yùn)行轉(zhuǎn)換后的組件樹(shù),并負(fù)責(zé)通過(guò)框架渲染管線(xiàn)送顯。 結(jié)語(yǔ) 以上就是本期ArkUI
    發(fā)表于 02-15 11:40

    HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言渲染控制概述

    ArkUI通過(guò)自定義組件的build()函數(shù)和@builder裝飾器中的聲明式UI描述語(yǔ)句構(gòu)建相應(yīng)的UI。 在聲明式描述語(yǔ)句中開(kāi)發(fā)者除了使用系統(tǒng)組件外,還可以使用渲染控制語(yǔ)句來(lái)輔助
    發(fā)表于 08-09 09:54

    OpenHarmony使用ArkUI Inspector分析布局

    Inspector,打開(kāi) ArkUI Inspector。 點(diǎn)擊 RUN 或者 DEBUG 按鈕,把應(yīng)用推包設(shè)備上,在設(shè)備應(yīng)用列表選擇當(dāng)前顯示在設(shè)備前端的 UI 進(jìn)程。本文使用的是
    發(fā)表于 09-04 15:27

    ArkUI,更高效的框架設(shè)計(jì)

    上期文章我們講到了ArkUI的三大特性,同時(shí)提到了ArkUI是一套用于構(gòu)建HarmonyOS應(yīng)用界面的UI開(kāi)發(fā)框架,本期我們將從架構(gòu)設(shè)計(jì)上來(lái)聊聊ArkUI的設(shè)計(jì)理念。
    的頭像 發(fā)表于 12-21 09:15 ?1877次閱讀

    鴻蒙ArkUI開(kāi)發(fā)-Tabs組件的使用

    鴻蒙ArkUI開(kāi)發(fā)-Tabs組件的使用
    的頭像 發(fā)表于 01-19 16:01 ?2423次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>開(kāi)發(fā)-Tabs組件的使用

    鴻蒙ArkUI-X跨平臺(tái)開(kāi)發(fā):【 編寫(xiě)第一個(gè)ArkUI-X應(yīng)用】

    通過(guò)構(gòu)建一個(gè)簡(jiǎn)單的ArkUI頁(yè)面跳轉(zhuǎn)示例,快速了解資源創(chuàng)建引用,路由代碼編寫(xiě)和UI布局編寫(xiě)等應(yīng)用開(kāi)發(fā)流程
    的頭像 發(fā)表于 05-21 17:36 ?1057次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>-X跨平臺(tái)開(kāi)發(fā):【 編寫(xiě)第一個(gè)<b class='flag-5'>ArkUI</b>-X應(yīng)用】

    鴻蒙ArkUI-X跨平臺(tái)開(kāi)發(fā):【 應(yīng)用工程結(jié)構(gòu)說(shuō)明】

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開(kāi)發(fā)框架擴(kuò)展不同的OS平臺(tái),比如Android和iOS平臺(tái),讓開(kāi)發(fā)者基于ArkUI,可復(fù)用大部分的應(yīng)用
    的頭像 發(fā)表于 05-19 21:05 ?820次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>-X跨平臺(tái)開(kāi)發(fā):【 應(yīng)用工程結(jié)構(gòu)說(shuō)明】

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品