0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ArkUI,更高效的框架设计

HarmonyOS开发者 来源:未知 2022-12-21 09:15 次阅读

上期文章我们讲到了ArkUI的三大特性,同时提到了ArkUI是一套用于构建HarmonyOS应用界面的UI开发框架,本期我们将从架构设计上来聊聊ArkUI的设计理念。

daa6ca04-80cc-11ed-8abf-dac502259ad0.png

ArkUI架构图

从架构图可以看出,ArkUI的设计理念是在端到端整条技术路径设计上建立了一整套完整的分层机制。接下来我们依次分层为大家介绍。

ArkUI框架的“前驱”——【前端层】

dab7c5c0-80cc-11ed-8abf-dac502259ad0.png

前端层

架构的第一层【前端层】又称【声明式UI前端】,这一层包含了上期文章介绍的极简的UI信息语法规范,UI组件以及ArkTS语言特有的状态管理机制。

dad6fc74-80cc-11ed-8abf-dac502259ad0.gif

独立的封装

此外,ArkUI对常用的UI组件的结构、样式、事件三大属性进行了独立的封装,内置于SDK中。开发人员可以根据项目设计需求,调用与设计匹配的组件函数,传入相应的参数来完成UI描述。

db018a48-80cc-11ed-8abf-dac502259ad0.png

声明式UI信息语法

同时使用声明式UI信息语法,可以让数据和View进行联动更新,华为自研语言ArkTS为这种联动刷新提供了多维度的状态管理机制,开发人员通过对数据进行注释标记,合理控制数据对应View的更新作用范围。

db14aab0-80cc-11ed-8abf-dac502259ad0.gif

三种更新方式

如:只单独更新、父子单向更新,父子双向同步更新等。

到这里,第一层【前端层】就介绍完毕了。

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

接下来我们来到了框架的第二层【核心层】。

db37a920-80cc-11ed-8abf-dac502259ad0.png

核心层

这一层主要包含两部分【方舟编译运行时】和【声明式UI后端引擎】。

db4d8efc-80cc-11ed-8abf-dac502259ad0.png

方舟编译运行时

【核心层】的第一部分是【方舟编译运行时】,它涉及到开发环境和终端环境

db6a4e66-80cc-11ed-8abf-dac502259ad0.png

运行流程图

【方舟编译运行时】的流程包含4步

db7acd5e-80cc-11ed-8abf-dac502259ad0.gif

跨语言调用

第1步是跨语言调用

ArkUI在开发项目时支持多语言开发,为不同的开发语言相互通信提供了通道,例如:提供了JS/TS与C/ C++交互的NAPI机制。

dbddfb86-80cc-11ed-8abf-dac502259ad0.png

新语言ArkTS

而在ArkUI支持的多种语言中,ArkTS是以TS为语法基础的应用编程语言。

dbf427bc-80cc-11ed-8abf-dac502259ad0.png

类型系统

在预编译的过程中,数据的静态类型信息会携带在生成的统一字节码中,后端编译的时候能直接利用这种类型信息加速机器码的执行,避免了运行时收集对象造成的额外开销,同时这些类型信息被用于AOT编译过程,使得应用启动时就可以执行AOT生成的优化机器码获得高性能运行体验。

dc0a46a0-80cc-11ed-8abf-dac502259ad0.png

统一字节码

第2步是统一字节码

完成项目开发将项目进行打包时,方舟编译器将编写的高级编程语言通过内置的工具链,编译为一种与运行设备和系统无关的可移植介质,这种介质就叫统一字节码(又称方舟码,abc文件),这个过程也称为字节码预编译。

dc1a3506-80cc-11ed-8abf-dac502259ad0.png

统一字节码

第3步是机器码和安装包

字节码在设备上可以通过解释执行或者编译后执行的方式运行,对于执行性能要求高的部分字节码调用AOT生成机器码。

最后,应用经历了开发、字节码预编译、AOT静态优化编译、打包签名就形成了一个完整安装包,这样一来就终于可以在设备上运行预览了。

dc368abc-80cc-11ed-8abf-dac502259ad0.png

GC机制

第4步是GC(Garbage Collection)机制

dc4db00c-80cc-11ed-8abf-dac502259ad0.png

搭载HarmonyOS系统的设备

对比其他设备,搭载HarmonyOS系统的设备上运行应用时会显得特别流畅,这里的秘密是什么呢?

dc68123a-80cc-11ed-8abf-dac502259ad0.png

GC机制技术问题

由于在传统的操作系统中,基于Tracing的GC存在着STW(Stop The World)阶段暂停时间较长的问题。

dc79b72e-80cc-11ed-8abf-dac502259ad0.png

STW

手机内存资源不够用的时候,传统操作系统虚拟机就会召唤GC(Garbage Collection)封锁公路,暂停手机运行的所有线程,等待它回收内存空间。

STW暂停时间较长

而且STW(Stop The World)阶段的暂停时间段较长,开发者无法精确控制和干预,在性能较差的手机上会表现出较强的“间歇性”卡顿。这就好比行驶在市区道路的车辆,在经过每个路口都遇到了较长时间的红灯等待,一路走走停停,行驶体验感较差。

ddd195f6-80cc-11ed-8abf-dac502259ad0.png

HPP GC

而方舟编译运行时在内存回收方面重新设计,基于Tracing GC推出了高性能内存回收技术——HPP GC(High Performance Partial Garbage Collection)。HPP GC综合了多种Tracing GC算法,根据不同对象区域,采用不同的回收方式。这种GC机制可以缩短STW阶段的时长,用在市区驾驶车辆来比喻,就是缩短了车辆在路口红灯等待的时间,增加了行驶的体验感。

ddec4ba8-80cc-11ed-8abf-dac502259ad0.gif

HPP GC

接下来我们来看核心层的第二部分——声明式UI后端引擎。

它在HarmonyOS系统终端运行时,由C++编写UI的基本组件、布局、动效和事件组成。供UI前端开发人员调用。

de127f80-80cc-11ed-8abf-dac502259ad0.gif

渲染管线

渲染管线是位于运行时内部的一个独立的渲染线程,它负责支配CPU多线程地去工作,让CPU为GPU提供更多的渲染数据,最大额度的调取GPU的能力。

到此,【核心层】已全部介绍完毕。

通过本期ArkUI架构的学习,相信大家已经了解方舟编译运行时的技术和流程,也对ArkUI的设计理念有了基础的认识。完整版的内容可查看上方的视频,我们下期再见~

END

想了解更多HarmonyOS技术?

后台留言给我们

立刻安排!


原文标题:ArkUI,更高效的框架设计

文章出处:【微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HarmonyOS
    +关注

    关注

    79

    文章

    1967

    浏览量

    29997

原文标题:ArkUI,更高效的框架设计

文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用PyTorch构建更高效的人工智能

    术界和工业界得到了广泛应用。本文将深入探讨如何使用PyTorch构建更高效的人工智能系统,从框架基础、模型训练、实战应用等多个方面进行详细解析。
    的头像 发表于 07-02 13:12 331次阅读

    鸿蒙开发ArkUI-X基础知识:【ArkUI代码工程及构建介绍】

    ArkUI作为OpenHarmony的默认开发框架,在本项目(ArkUI-X)中需要做到一套代码同时支持多平台构建,所以会采取共仓开发的方式,部分仓直接指向OpenHarmony相关开源仓。
    的头像 发表于 05-25 16:45 1988次阅读
    鸿蒙开发<b class='flag-5'>ArkUI</b>-X基础知识:【<b class='flag-5'>ArkUI</b>代码工程及构建介绍】

    鸿蒙开发ArkUI-X基础知识:【ArkUI跨平台设计总体说明】

    本文档描述ArkUI开发框架跨平台运行能力相关的总体技术方案。
    的头像 发表于 05-24 15:41 1484次阅读
    鸿蒙开发<b class='flag-5'>ArkUI</b>-X基础知识:【<b class='flag-5'>ArkUI</b>跨平台设计总体说明】

    鸿蒙ArkUI-X框架开发:【开发准备】

    本文档适用于ArkUI-X框架开发的初学者。通过环境搭建、代码下载、代码编译、API扩展和使用,快速了解跨平台项目开发流程。
    的头像 发表于 05-23 21:02 427次阅读
    鸿蒙<b class='flag-5'>ArkUI</b>-X<b class='flag-5'>框架</b>开发:【开发准备】

    鸿蒙ArkUI-X跨语言调用说明:【平台桥接(@arkui-x.bridge)】

    平台桥接用于客户端(ArkUI)和平台(Android或iOS)之间传递消息,即用于ArkUI与平台双向数据传递、ArkUI侧调用平台的方法、平台调用ArkUI侧的方法。
    的头像 发表于 05-21 15:09 667次阅读
    鸿蒙<b class='flag-5'>ArkUI</b>-X跨语言调用说明:【平台桥接(@<b class='flag-5'>arkui</b>-x.bridge)】

    鸿蒙ArkUI-X跨平台开发:【SDK目录结构介绍】

    本文档配套ArkUI-X,将OpenHarmony ArkUI开发框架扩展到不同的OS平台,比如Android和iOS平台,让开发者基于ArkUI,可复用大部分的应用代码(UI以及主要
    的头像 发表于 05-20 16:28 768次阅读
    鸿蒙<b class='flag-5'>ArkUI</b>-X跨平台开发:【SDK目录结构介绍】

    鸿蒙ArkUI-X跨平台开发:【 应用工程结构说明】

    本文档配套ArkUI-X,将OpenHarmony ArkUI开发框架扩展到不同的OS平台,比如Android和iOS平台,让开发者基于ArkUI,可复用大部分的应用代码(UI以及主要
    的头像 发表于 05-19 21:05 537次阅读
    鸿蒙<b class='flag-5'>ArkUI</b>-X跨平台开发:【 应用工程结构说明】

    鸿蒙跨平台框架:【ArkUi-X】创建工程

    鸿蒙推出了鸿ArkUi-X 框架所以就写个文章分享一下
    的头像 发表于 05-13 17:48 860次阅读
    鸿蒙跨平台<b class='flag-5'>框架</b>:【<b class='flag-5'>ArkUi</b>-X】创建工程

    鸿蒙ArkUI:【从代码到UI显示的整体渲染流程】

    方舟开发框架(简称ArkUI)是鸿蒙开发的UI框架,提供如下两种开发范式,我们 **只学声明式开发范式**
    的头像 发表于 05-13 16:06 794次阅读
    鸿蒙<b class='flag-5'>ArkUI</b>:【从代码到UI显示的整体渲染流程】

    鸿蒙开发学习:初探【ArkUI-X】

    **简单来说,ArkTS + ArkUI-X 对标的框架为 flutter,一次代码,编译为 native 全平台运行**
    的头像 发表于 05-13 15:58 976次阅读
    鸿蒙开发学习:初探【<b class='flag-5'>ArkUI</b>-X】

    鸿蒙ArkUI开发学习:【渲染控制语法】

    ArkUI开发框架是一套构建 HarmonyOS / OpenHarmony 应用界面的声明式UI开发框架,它支持程序使用 `if/else` 条件渲染, `ForEach` 循环渲染以及 `LazyForEach` 懒加载渲染
    的头像 发表于 04-09 16:40 894次阅读
    鸿蒙<b class='flag-5'>ArkUI</b>开发学习:【渲染控制语法】

    鸿蒙ArkUI实例:【自定义组件】

    组件是 OpenHarmony 页面最小显示单元,一个页面可由多个组件组合而成,也可只由一个组件组合而成,这些组件可以是ArkUI开发框架自带系统组件,比如 `Text` 、 `Button` 等,也可以是自定义组件,本节笔者简单介绍一下自定义组件的语法规范。
    的头像 发表于 04-08 10:17 601次阅读

    跨Android、iOS、鸿蒙多平台框架ArkUI-X

    ArkUI是一套构建分布式应用界面的声明式UI开发框架。它使用极简的UI信息语法、丰富的UI组件、以及实时界面预览工具,帮助您提升移动应用界面开发效率30%。您只需使用一套ArkTS API,就能
    的头像 发表于 01-31 14:52 1716次阅读
    跨Android、iOS、鸿蒙多平台<b class='flag-5'>框架</b><b class='flag-5'>ArkUI</b>-X

    鸿蒙ArkUI开发-Tabs组件的使用

    鸿蒙ArkUI开发-Tabs组件的使用
    的头像 发表于 01-19 16:01 1754次阅读
    鸿蒙<b class='flag-5'>ArkUI</b>开发-Tabs组件的使用

    架设

    架设计,这种构架设计是新的知识希望能够得到一本,可以继续发展构架思维和构架设计灵感。
    发表于 12-18 11:09