ArkUI,更高效的框架設計

HarmonyOS開發者社群發表於2022-12-21

ArkUI,更高效的框架設計

上期文章我們講到了ArkUI的三大特性,同時提到了ArkUI是一套用於構建HarmonyOS應用介面的UI開發框架,本期我們將從架構設計上來聊聊ArkUI的設計理念。

undefined

ArkUI架構圖

從架構圖可以看出,ArkUI的設計理念是在端到端整條技術路徑設計上建立了一整套完整的分層機制。接下來我們依次分層為大家介紹。

ArkUI框架的“前驅”——【前端層】

undefined

前端層

架構的第一層【前端層】又稱【宣告式UI前端】,這一層包含了上期文章介紹的極簡的UI資訊語法規範,UI元件以及ArkTS語言特有的狀態管理機制。

ArkUI,更高效的框架設計

獨立的封裝

此外,ArkUI對常用的UI元件的結構、樣式、事件三大屬性進行了獨立的封裝,內建於SDK中。開發人員可以根據專案設計需求,呼叫與設計匹配的元件函式,傳入相應的引數來完成UI描述。

undefined

宣告式UI資訊語法

同時使用宣告式UI資訊語法,可以讓資料和View進行聯動更新,華為自研語言ArkTS為這種聯動重新整理提供了多維度的狀態管理機制,開發人員透過對資料進行註釋標記,合理控制資料對應View的更新作用範圍。

ArkUI,更高效的框架設計

三種更新方式

如: 只單獨更新、父子單向更新,父子雙向同步更新等。

到這裡,第一層【前端層】就介紹完畢了。

ArkUI框架的“核心部分”——【核心層】

接下來我們來到了框架的第二層【核心層】。

undefined

核心層

這一層主要包含兩部分【方舟編譯執行時】和【宣告式UI後端引擎】。

undefined

方舟編譯執行時

【核心層】的第一部分是【方舟編譯執行時】,它涉及到開發環境和終端環境

undefined

執行流程圖

【方舟編譯執行時】的流程包含4步

ArkUI,更高效的框架設計

跨語言呼叫

第1步是跨語言呼叫

ArkUI在開發專案時支援多語言開發,為不同的開發語言相互通訊提供了通道,例如:提供了JS/TS與C/ C++互動的NAPI機制。

undefined

新語言ArkTS

而在ArkUI支援的多種語言中,ArkTS是以TS為語法基礎的應用程式語言。

undefined

型別系統

在預編譯的過程中,資料的靜態型別資訊會攜帶在生成的統一位元組碼中,後端編譯的時候能直接利用這種型別資訊加速機器碼的執行,避免了執行時收集物件造成的額外開銷,同時這些型別資訊被用於AOT編譯過程,使得應用啟動時就可以執行AOT生成的最佳化機器碼獲得高效能執行體驗。

undefined

統一位元組碼

第2步是統一位元組碼

完成專案開發將專案進行打包時,方舟編譯器將編寫的高階程式語言透過內建的工具鏈,編譯為一種與執行裝置和系統無關的可移植介質,這種介質就叫統一位元組碼(又稱方舟碼,abc檔案),這個過程也稱為位元組碼預編譯。

undefined

統一位元組碼

第3步是機器碼和安裝包

位元組碼在裝置上可以透過解釋執行或者編譯後執行的方式執行,對於執行效能要求高的部分位元組碼呼叫AOT生成機器碼。

最後,應用經歷了開發、位元組碼預編譯、AOT靜態最佳化編譯、打包簽名就形成了一個完整安裝包,這樣一來就終於可以在裝置上執行預覽了。

undefined

GC機制

第4步是GC(Garbage Collection)機制

undefined

搭載HarmonyOS系統的裝置

對比其他裝置,搭載HarmonyOS系統的裝置上執行應用時會顯得特別流暢,這裡的秘密是什麼呢?

undefined

GC機制技術問題

由於在傳統的作業系統中,基於Tracing的GC存在著STW(Stop The World)階段暫停時間較長的問題。

undefined

STW

當手機記憶體資源不夠用的時候,傳統作業系統虛擬機器就會召喚GC(Garbage Collection)封鎖公路,暫停手機執行的所有執行緒,等待它回收記憶體空間。

ArkUI,更高效的框架設計

STW暫停時間較長

而且STW(Stop The World)階段的暫停時間段較長,開發者無法精確控制和干預,在效能較差的手機上會表現出較強的“間歇性”卡頓。這就好比行駛在市區道路的車輛,在經過每個路口都遇到了較長時間的紅燈等待,一路走走停停,行駛體驗感較差。

undefined

HPP GC

而方舟編譯執行時在記憶體回收方面重新設計,基於Tracing GC推出了高效能記憶體回收技術——HPP GC(High Performance Partial Garbage Collection)。HPP GC綜合了多種Tracing GC演算法,根據不同物件區域,採用不同的回收方式。這種GC機制可以縮短STW階段的時長,用在市區駕駛車輛來比喻,就是縮短了車輛在路口紅燈等待的時間,增加了行駛的體驗感。

ArkUI,更高效的框架設計

HPP GC

接下來我們來看核心層的第二部分——宣告式UI後端引擎。

它在HarmonyOS系統終端執行時,由C++編寫UI的基本元件、佈局、動效和事件組成。供UI前端開發人員呼叫。

ArkUI,更高效的框架設計

渲染管線

渲染管線是位於執行時內部的一個獨立的渲染執行緒,它負責支配CPU多執行緒地去工作,讓CPU為GPU提供更多的渲染資料,最大額度的調取GPU的能力。

到此,【核心層】已全部介紹完畢。

透過本期ArkUI架構的學習,相信大家已經瞭解方舟編譯執行時的技術和流程,也對ArkUI的設計理念有了基礎的認識。完整版的內容可檢視上方的影片,我們下期再見~

undefined


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009402/viewspace-2928839/,如需轉載,請註明出處,否則將追究法律責任。

相關文章