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

    文章

    584

    浏览量

    33978
  • 开源社区
    +关注

    关注

    0

    文章

    95

    浏览量

    771

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NVIDIA ACE现已支持开源Qwen3-8B小语言模型

    为助力打造实时、动态的 NPC 游戏角色,NVIDIA ACE 现已支持开源 Qwen3-8B 小语言模型(SLM),可实现 PC 游戏中的本地部署。
    的头像 发表于 10-29 16:59 1013次阅读

    知乎开源“智能预渲染框架” 几行代码实现鸿蒙应用页面“秒开”

    ,交互延迟等核心痛点,通过智能预测用户浏览目标进行提前渲染,只需几行代码即可显著提升复杂页面的加载性能,实现“页面秒开”的高效体验,为鸿蒙开发者带来开发效率和用户体验的双重飞跃。 随着鸿蒙生态快速发展,应用开发者难免会遇到些性能问题
    的头像 发表于 08-29 14:32 464次阅读
    知乎开源“智能预渲染<b class='flag-5'>框架</b>” 几行<b class='flag-5'>代码</b>实现鸿蒙应用页面“秒开”

    ArkUI-X框架LogInterface使用指南

    ArkUI-X框架支持日志拦截能力,Android侧提供原生接口,用于注入LogInterface接口,框架日志及ts日志通过该接口输出,本文的核心内容是介绍如何在Android平台上有效利用
    发表于 06-15 23:20

    Ace 5至尊版搭载联发科天玑9400+处理器

    想要成为掌管游戏的“神”?当然要性能、触控、网络都在线!新发布的Ace 5 至尊版搭载游戏全链路芯片级硬件解决方案「电竞三芯」,集天玑 9400+ 旗舰芯、灵犀触控芯、电竞 Wi-Fi 芯片 G1 于体,打造超流畅的至尊
    的头像 发表于 06-03 17:28 1395次阅读

    电竞三芯 游戏至尊 Ace 5 至尊系列售价 2499 元起

    2025年5月27日,加正式推出Ace5至尊系列,包含Ace5至尊版与
    的头像 发表于 05-27 16:55 2152次阅读
    电竞三芯 游戏至尊 <b class='flag-5'>一</b>加 <b class='flag-5'>Ace</b> 5 至尊系列售价 2499 元起

    电竞三芯,游戏至尊 Ace 5 至尊系列正式定档5月27日

    5月20日,加官方宣布Ace5至尊系列正式定档5月27日。Ace5至尊系列搭载天玑9400系列旗舰性能芯的同时,集灵犀触控芯、电竞
    的头像 发表于 05-20 16:04 797次阅读
    电竞三芯,游戏至尊 <b class='flag-5'>一</b>加 <b class='flag-5'>Ace</b> 5 至尊系列正式定档5月27日

    STM32如何移植Audio框架

    最近在学习音频解码,想用下Audio框架。 1、这个该如何移植到自己创建的BSP并对接到device框架中?看了官方移植文档没有对没有对该部分的描述。 2、我只想实现个简单的播放功
    发表于 04-01 08:08

    基于Django89的web框架代码

    基于Django89的web框架代码,超详细
    发表于 02-10 15:38 0次下载

    游戏体验天花板,Ace 5 系列售价 2299 元起

    的市场需求,加品牌于2024年12月26日正式推出了其最新的游戏性能旗舰——Ace 5系列,包括Ace 5与
    的头像 发表于 02-06 18:11 2497次阅读
    游戏体验天花板,<b class='flag-5'>一</b>加 <b class='flag-5'>Ace</b> 5 系列售价 2299 元起

    AI开发框架集成介绍

    随着AI应用的广泛深入,单框架往往难以满足多样化的需求,因此,AI开发框架的集成成为了提升开发效率、促进技术创新的关键路径。以下,是对AI开发框架集成的介绍,由AI部落小编整理。
    的头像 发表于 01-07 15:58 924次阅读

    Ace 5 系列Pop-up快闪来袭,电竞女神程潇惊喜现身

    12月28日,Ace5系列主题快闪活动「宿舍战神挑战赛」在深圳举行,来自深圳大学电竞社四大学生战队同台集结,为现场海量加油献上精彩激烈的《和平精英》对抗赛。Ace特邀电竞官程潇
    的头像 发表于 12-30 09:33 1303次阅读
    <b class='flag-5'>一</b>加 <b class='flag-5'>Ace</b> 5 系列Pop-up快闪来袭,电竞女神程潇惊喜现身

    Ace 5系列正式发布

    Ace 5系列正式发布。该系列中,Ace 5 Pro搭载全新的骁龙8至尊版移动平台,A
    的头像 发表于 12-27 11:52 3022次阅读

    游戏体验天花板,Ace 5 系列售价 2299 元起

    2024年12月26日,加正式发布游戏体验天花板Ace5系列——Ace5及
    的头像 发表于 12-27 10:19 2101次阅读
    游戏体验天花板,<b class='flag-5'>一</b>加 <b class='flag-5'>Ace</b> 5 系列售价 2299 元起

    ACE无线温度电流复合传感器

    产品概述:  ACE100无线温度电流复合传感器主要用于低压开关柜输电电缆的的温度和电流的检测。传感器采用内部电池和电磁取能的双供电方式,快速准确的测量低压电缆的温度及电流数据,通过无线的方式上传至
    的头像 发表于 12-20 15:27 785次阅读
    <b class='flag-5'>ACE</b>无线温度电流复合传感器

    SSM框架在Java开发中的应用 如何使用SSM进行web开发

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web开发中常用的技术栈。它通过分层架构,实现了视图、控制、业务逻辑和数据访问的分离,提高了代码的可维护性和可扩展性
    的头像 发表于 12-16 17:28 2125次阅读