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

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

3天内不再提示

一文总结 ACE 代码框架

电子发烧友开源社区 来源:未知 2023-01-11 03:30 次阅读


田可辉

鸿湖万联高级技术专家

鸿湖万联产品推荐

一、前言

ACE_Engine框架是OpenAtom OpenHarmony(简称“OpenHarmony”)的UI开发框架,为开发者提供在进行应用UI开发时所必需的各种组件,以及定义这些组件的属性、样式、事件及方法,通过这些组件可以方便进行OpenHarmony上UI应用的开发。

ACE_Engine提供的组件分为两种类型,即类Web开发范式类型和声明式开发范式类型。其中类Web开发范式中定义一个页面需要三个文件,html,css和js文件。html文件负责页面布局,css文件负责定义组件的样式,js文件负责业务逻辑实现。而声明式范式仅需要1个ets文件,页面布局和组件的样式以及业务逻辑实现都在此文件中。如图:


二、ACE_Engine框架模块划分

对于类Web开发范式组件,根据组件从前端到后端的过程,可以将整个框架划分为JsFrameWork、DomNode、ComPonent、RenderNode四个模块。其作用分别如下:

JsFrameWork:负责解析前端html和css文件,创建出DomNode树。该树的结构和前端页面是一一对应的。

DomNode:负责将Dom树转换为Component树。注意一个Dom节点转换过后的Component节点实际上并不是一个单独的节点,而是一棵以rootComponent为根节点的组件树。该树中逐层包裹了对应的功能组件,最内部才是真正的主节点(这样的作用是功能解耦合,将某一特定的功能放到对应的组件中去)。如BoxComponet负责组件的边框绘制,DisplayComponent负责组件透明度绘制,TouchComponent负责组件触摸时间的处理等,一个详细过程见DOMNode::GenerateComponentNode函数。

ComPonent:负责将Component树中所有继承自RenderComponent的节点(可绘制节点)创建对应的RendNode节点,生成对应的RendNode树。见RenderComponent ::CreateRenderNode虚函数。

RenderNode:RenderNode即可绘制的节点,负责组件的最终布局和绘制。其中布局函数为PerformLayout虚函数,由每个组件对应的实现类Render***类来实现。绘制函数为Paint虚函数,由每个组件对应的子类FlutterRender***类来实现。

对于声明式开发范式组件,根据组件从前端到后端的过程,可以将整个框架划分为EtsLoader、JsView、ComPonent、RenderNode四个模块。其作用分别如下:

EtsLoader:负责解析ets页面,根据组件的tag标签创建对应的JsView对象,生成jsView树。
JsView:负责处理组件的属性,方法和事件。并通过Create函数创建对应的Component树。
ComPonent:同Web开发范式组件中的Component
RenderNode:同Web开发范式组件中的RenderNode

各模块创建示意图如下图所示:


各模块间的调用关系及主要函数如下:


三、组件的属性和样式的传递过程

1.组件的属性和样式是保存在前端页面的,通过JsframeWork解析页面,并调用JsEngine的CreateDomNode接口创建Dom节点的同时传递新节点属性和样式。如果页面中属性样式发生变化,则单独调用SetAttr或SetStyle来更新属性和样式。

2.DomNode收到属性和样式之后,会将通用属性保存在Declaration类中,将组件特有的属性通过SetSpecialAttr和SetSpecialStyle函数保存在自身。

3.DomNode调用对应Component类的Set***函数,将所有属性和样式设置到Component中。

4.RenderNode创建后,会调用其Update函数。该函数内调用对应Component的Get***函数,来接收组件的所有属性和样式。

5.在PipeLine中会遍历每个RenderNode进行布局和绘制,此时,就依据RenderNode中接收的属性和样式,进行布局并绘制。


四、总结

ACE_Engine框架整体代码较复杂,涉及的类别也比较多。本文介绍了一个ACE组件从前端的页面描述,到中间层三棵树的创建和属性传递,以及最终进行UI布局和绘制的整个过程。该过程总结一下就是:JS页面 —> Dom树 —> Component树 —> Render树,最后绘制Render树。大家只要理解这个基本过程,再结合代码关注重点流程,就能够对ACE_Engine框架的代码有整体的理解。在此基础上可以进行ACE组件的增强功能开发,包括新增一个ACE组件等。

参考

新增一个类Web范式组件开发指南

https://gitee.com/yan-shuifeng/arkui_docs/blob/master/wiki/Ace1.0前端新增组件开发指南%EF%BC%9A以新增MyCircle组件为例_ver1.0.md

新增一个声明式范式组件开发指南

https://gitee.com/yan-shuifeng/arkui_docs/blob/master/wiki/Ace2.0前端新增组件开发指南%EF%BC%9A以新增MyCircle组件为例_ver1.0.md



更多热点文章阅读
  • DevEco Studio新特性分享-跨语言调试,让调试更便捷高效
  • 基于 OpenHarmony 的智联北斗海防系统
  • 玩转OpenHarmony智能家居:如何实现树莓派“碰一碰”设备控制
  • 玩转OpenHarmony社交场景:即时通讯平台
  • HarmonyOS多媒体框架介绍


提示:本文由电子发烧友社区发布,转载请注明以上来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com。


原文标题:一文总结 ACE 代码框架

文章出处:【微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

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

    关注

    33

    文章

    546

    浏览量

    32356
  • 开源社区
    +关注

    关注

    0

    文章

    92

    浏览量

    342

原文标题:一文总结 ACE 代码框架

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一加 Ace 3V 售价 1999 起,全面普及旗舰 AI 体验

    2024 年 3 月 21 日,一加正式发布一加 Ace 3V 。一加 Ace 3V 全球首发第三代骁龙 7+ 移动平台,采用5500mAh 大电池 + 长寿版 100W 超级闪充的续航组合,配备
    的头像 发表于 03-22 09:27 148次阅读
    一加 <b class='flag-5'>Ace</b> 3V 售价 1999 起,全面普及旗舰 AI 体验

    一加 Ace 3 获南德 48 个月 A 级流畅认证,全面革新流畅体验

    1 月 2 日,一加宣布一加 Ace 3 搭载第二代骁龙 8 旗舰芯片、16GB LPDDR5X 旗舰内存、1TB UFS 4.0 旗舰储存,打造同档位性能新标杆。 一加中国区总裁李杰表示:“极致
    的头像 发表于 01-02 14:16 322次阅读

    如何设置ACE和DGP实现AD9164评估套件的subclass1模式?

    已经有FPGA底板和AD9164评估板套件,如何设置ACE和DGP实现AD9164的subclass1模式,直接设置ACE和DGP为subclass1模式并没有生成sysref±信号,请问该如何设置参数,实现该模式的通信
    发表于 12-08 07:14

    mybatis框架的主要作用

    MyBatis框架是一种流行的Java持久化框架,主要用于简化数据库操作和管理。它提供了一种简洁的方式来访问数据库,并将SQL语句从Java代码中分离出来,从而提高了代码的可维护性和可
    的头像 发表于 12-03 14:49 1016次阅读

    深度学习框架是什么?深度学习框架有哪些?

    深度学习框架是什么?深度学习框架有哪些?  深度学习框架是一种软件工具,它可以帮助开发者轻松快速地构建和训练深度神经网络模型。与手动编写代码相比,深度学习
    的头像 发表于 08-17 16:03 1778次阅读

    一加 Ace 2 Pro 2999 元起售 推高行业上限 重构性能想象

    2023 年 8 月 16 日,一加正式发布 Ace 系列的最新产品一加 Ace 2 Pro。一加 Ace 2 Pro 采用第二代骁龙 8 移动平台 + LPDDR5X + UFS 4.0 的顶级
    的头像 发表于 08-17 11:46 314次阅读
    一加 <b class='flag-5'>Ace</b> 2 Pro 2999 元起售 推高行业上限 重构性能想象

    性能手机引领者一加 Ace 2 Pro 正式发布 售价 2999 元起

    2023 年 8 月 16 日,一加正式发布 Ace 系列的最新产品一加 Ace 2 Pro。一加 Ace 2 Pro 采用第二代骁龙 8 移动平台 + LPDDR5X + UFS 4.0 的顶级
    的头像 发表于 08-16 17:23 731次阅读
    性能手机引领者一加 <b class='flag-5'>Ace</b> 2 Pro 正式发布 售价 2999 元起

    AMBA 4 ACEACE Lite协议校验器用户指南

    本书是为系统设计者、系统集成商和验证工程师编写的,他们希望确认设计符合相关AMBA4协议。这可以是ACEACE Lite
    发表于 08-10 07:01

    labview视觉通用平台框架代码

    本帖最后由 1281788316 于 2024-4-19 13:52 编辑 labview通用视觉软件框架,机器视觉通用框架 通用视觉框架代码。可以参考用于开发常规案例。里面有
    发表于 08-03 16:57

    Linux Led子系统代码框架分析

    代码框架分析 led-class.c (led 子系统框架的入口) 维护 LED 子系统的所有 LED 设备,为 LED 设备提供注册操作函数: led_classdev_register
    的头像 发表于 07-20 10:36 419次阅读

    ACE协议和CHI协议里的Tag match operation

    ACE和CHI协议都支持MTE特性,不过ACE协议里只有ACE5-Lite,ACE5-LiteDVM (Basic only)和AXI5支持MTE,因此其实
    发表于 06-15 16:08 538次阅读
    <b class='flag-5'>ACE</b>协议和CHI协议里的Tag match operation

    AMBA:将所有内容拼接到ACE您的测试

    基于 AMBA ACE 互连的系统可以通过相干互连连接各种主站和从站。每个主组件和从组件都可以单独支持完整的 ACEACE-Lite™、AXI4™ 或 AXI3™ 协议,并且可以使用不同的总线
    的头像 发表于 05-29 09:44 539次阅读
    AMBA:将所有内容拼接到<b class='flag-5'>ACE</b>您的测试

    验证符合AXI/ACE标准的互连的策略

    用于片上系统 (SoC) 中功能块连接和管理的 AMBA 4 规范现在具有支持多核计算的高级可扩展接口 (AXI) 一致性扩展 (ACE)。ACE 规范支持跨多核处理器群集的系统级缓存一致性。对这种系统的核查提出了重大挑战。
    的头像 发表于 05-25 14:50 1151次阅读
    验证符合AXI/<b class='flag-5'>ACE</b>标准的互连的策略

    求分享用于运行稳定项目代码的基本MicroPython框架

    这是在 ESP8266 上构建 MicroPython 项目的基本框架的指导。该框架不仅是 MicroPython 入门教程,还具有开箱即用的稳定 IoT 项目代码的关键核心组件。
    发表于 05-22 09:40

    精选的开源框架代码分享!

    我最早接触的开源代码,应该就是**FreeRTOS**了,从接触到现在对于该RTOS的代码研读应该有3遍的样子,虽然工作以后也会用到其他的RTOS,但感觉都大同小异,因为他们封装的服务接口都很类似
    的头像 发表于 05-06 17:39 476次阅读