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

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

3天内不再提示

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

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-05-13 16:06 次阅读

ArkUI

方舟开发框架(简称ArkUI)是鸿蒙开发的UI框架,提供如下两种开发范式,我们 只学声明式开发范式

  1. [基于ArkTS的声明式开发范式]
  2. [兼容JS的类Web开发范式]
  3. 开发前请熟悉鸿蒙开发指导文档:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

整体架构图

image.png

我们使用ArkTS写完页面描述后,交给语言运行时进行语法解析,再之后由C++编写的后端引擎将UI转换为渲染指令交给渲染引擎绘制到屏幕上

ArkUI语法初见

image.png

  1. ArkTS对TypeScript语言进行扩展,提供值类型结构struct。
  2. struct定义自定义组件,必须搭配Component或者CustomDialog使用
  3. ArkUI中组件定义和状态管理都是通过装饰器来做的。TS中的装饰器主要有类装饰器、属性装饰器、方法装饰器以及参数装饰器四种
  4. 事件方法和属性方法只是方法的入参不一样,一个是基本值或者表达式值,一个是函数。
  5. 在TS中函数我们就把函数当成变量来用就行,只不过普通变量是存储一个类型的值,而函数用来存储一个输入到输出的转变过程
  6. 还记得我们上面说的描述UI嘛,在这里就在build函数中描述。框架会自动调用build,不需要我们手动调用

从代码到UI显示的整体渲染流程

image.png

ArkUI的渲染分为两大情况

从创建到显示(①~⑤)

① 通过devEco将源码编译成带类型标识的字节码文件,同时携带创建这个结构所需信息的指令流

② 通过跨语言调用生成C++层的Component树。这一步只是把ArkTS描述转变成了使用C++描述

③ 通过Component树生成Element树,Element是Component的实例,用于表示一个具体的组件节点。界面在运行时的树形结构就是通过Element树来维持的,同时自动更新的diff算法也是依赖Element树来减少复杂度的

④ 对于每个可显示的Element都会为其创建对应的RenderNode。RenderNode负责一个节点的显示信息,它形成的Render树维护着整个界面渲染需要用到的信息,包括位置、大小、绘制命令等。后续的布局、绘制都是在Render树上进行的

⑤ 实现真正的渲染并显示绘制结果。HarmonyOSOpenHarmony鸿蒙文档籽料:mau123789是v直接拿

搜狗高速浏览器截图20240326151547.png

按钮点击到更新显示(⑥~⑪)

⑥ 点击事件传递到组件,组件的onClick事件方法被触发执行

⑦ 由于onClick事件方法中@State注解过的变量改变了,相应getter/setter函数会被触发

⑧ 状态管理模块定位出关联的UI组件

⑨ 状态管理模块更新相应的Element树的信息

⑩ 更新相应的UI组件的渲染信息

⑪ 界面显示,与⑤类似

盒子模型

image.png

上面我们说的布局原理,子视图上报给父视图自身大小的值是指 组件内容区的大小

审核编辑 黄宇

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

    关注

    0

    文章

    204

    浏览量

    21351
  • 鸿蒙
    +关注

    关注

    57

    文章

    2325

    浏览量

    42766
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    【HarmonyOS HiSpark AI Camera试用连载 】鸿蒙JS UI介绍

    设备显示能力,运行时自动映射到不同设备类型,开发者无感知,降低开发者多设备适配成本。高性能开发框架包含了许多核心的控件,如列表、图片和各类容器组件等,针对声明式语法进行了渲染流程的优化。整体
    发表于 01-11 20:10

    HDC技术分论坛:HarmonyOS新一代UI框架的全面解读

    UI开发。通过eDSL,结合语法糖或者语言原生的元编程能力,设计了统一的UI开发范式,并能够结合不同语言来实现应用的逻辑处理部分。2. 关键渲染性能下面通过一个简单的示例代码,为大家讲
    发表于 10-26 18:48

    HDC技术分论坛:HarmonyOS新一代UI框架的全面解读

    。通过eDSL,结合语法糖或者语言原生的元编程能力,设计了统一的UI开发范式,并能够结合不同语言来实现应用的逻辑处理部分。2. 关键渲染性能下面通过一个简单的示例代码,为大家讲述
    发表于 11-22 16:51

    HDD杭州站•ArkUI让开发更灵活

    ArkUI的能力,给开发者带来了以下新的预览体验:● 亚秒级别实时预览通过检测最小更新代码,进行局部渲染更新,达到亚秒级的实时预览能力。● UI界面与
    发表于 08-05 11:33

    本周四晚19:00知识赋能第八期第1课丨ArkUI框架整体设计

    UI绘制和渲染,只需聚焦应用开发,从而实现极简高效地开发。9月15日(本周四)晚上19:00,第8期第1节直播,巴延兴老师在直播间与大家分享《ArkUI框架整体设计》——本次分享将介绍
    发表于 09-14 15:35

    ArkUI,更高效的框架设计

    ArkUI是一套用于构建HarmonyOS应用界面的UI开发框架,本期我们将从架构设计上来聊聊ArkUI的设计理念。 ArkUI架构图
    发表于 12-21 10:26

    ArkUI新能力,助力应用开发更便捷

    、@ObjectLink、@Builder机制支持动态化增加组件能力并融合到现有的UI中,ArkUI提供加载运行转换后的组件树,并负责通过框架渲染管线送显。 结语 以上就是本期ArkUI
    发表于 02-15 11:40

    HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制概述

    ArkUI通过自定义组件的build()函数和@builder装饰器中的声明式UI描述语句构建相应的UI。 在声明式描述语句中开发者除了使用系统组件外,还可以使用渲染控制语句来辅助
    发表于 08-09 09:54

    OpenHarmony使用ArkUI Inspector分析布局

    Inspector,打开 ArkUI Inspector。 点击 RUN 或者 DEBUG 按钮,把应用推包设备上,在设备应用列表选择当前显示在设备前端的 UI 进程。本文使用的是
    发表于 09-04 15:27

    ArkUI,更高效的框架设计

    上期文章我们讲到了ArkUI的三大特性,同时提到了ArkUI是一套用于构建HarmonyOS应用界面的UI开发框架,本期我们将从架构设计上来聊聊ArkUI的设计理念。
    的头像 发表于 12-21 09:15 1553次阅读

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

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

    鸿蒙ArkUI-X跨平台开发:【 编写第一个ArkUI-X应用】

    通过构建一个简单的ArkUI页面跳转示例,快速了解资源创建引用,路由代码编写和UI布局编写等应用开发流程
    的头像 发表于 05-21 17:36 651次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkUI</b>-X跨平台开发:【 编写第一个<b class='flag-5'>ArkUI</b>-X应用】

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

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