当前位置: 首页 > article >正文

OpenHarmony 实战开发——一文总结ACE代码框架

一、前言

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组件等。

经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

在这里插入图片描述

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview

如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

开发基础知识:

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

鸿蒙开发面试真题(含参考答案):https://gitcode.com/HarmonyOS_MN/733GH/overview

在这里插入图片描述

OpenHarmony 开发环境搭建

图片

《OpenHarmony源码解析》:https://gitcode.com/HarmonyOS_MN/733GH/overview

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

图片

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview

图片
在这里插入图片描述


http://www.kler.cn/news/285047.html

相关文章:

  • 在多云生态下,如何实现跨云的自动化身份管理?
  • 【React】从零开始搭建 react 项目(初始化+路由)
  • Linux虚拟机搭建K8S环境
  • 通过Dot1q终结子接口实现VLAN间互访
  • python基础操作
  • 【C++ Primer Plus习题】7.4
  • 【React】react项目安装tailwindcss
  • Java在项目中实现登录密码加密传输
  • bat 文件, 简化git 操作
  • python测试框架之Pytest
  • 阿里 “通义灵码” 真的 “灵吗”,全保姆级实操
  • LSTM-Autoencoder深度学习模型在电动机异常检测中的应用
  • List<String> 和 ArrayList<String>的区别
  • RK3568笔记五十八:基于SIP的视频通话测试
  • [hostapd]conf配置ht
  • 搭建ELK-Filebeat采集系统日志
  • 书生大模型实战营(2)——函数实现+Vscode连接InternStudio debug笔记
  • jmeter的聚合报告生成测试报告的方法(生成.HTML模式)
  • Linux进程基本介绍,ps指令详解
  • CSS 的object-position属性
  • python模块和包的区别有哪些
  • 解决TESSY导入测试用例后出现提示接口有改变的问题
  • 2024年软考科目大调整:考试安排、频次变动全解析
  • EasyCVR中的H.265技术:助力实现大规模高效流畅的视频监控应用
  • docker run的--shm-size是干嘛用的
  • ws2812b效果研究之八 pride2015
  • BIRTV2024圆满落幕,中科极光9万流明点亮观影新体验
  • 【详细教程】分享6款AI论文创作工具!一键毕业论文轻松生成,
  • HTML 中 a 超链接标签全解析:属性、锚点与伪类
  • vue+moment转化日期格式为年月日时分秒!最简洁版