原文:https://mp.weixin.qq.com/s/uSIzuBby7Z92drNDmejKXw,点击链接查看更多技术内容。
 
 

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

ArkUI架构图

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

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

前端层

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

独立的封装

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

声明式UI信息语法

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

三种更新方式

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

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

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

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

核心层

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

方舟编译运行时

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

运行流程图

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

跨语言调用

第1步是跨语言调用

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

新语言ArkTS

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

类型系统

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

统一字节码

第2步是统一字节码

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

统一字节码

第3步是机器码和安装包

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

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

GC机制

第4步是GC(Garbage Collection)机制

搭载HarmonyOS系统的设备

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

GC机制技术问题

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

STW

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

STW暂停时间较长

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

HPP GC

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

HPP GC

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

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

渲染管线

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

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

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

ArkUI,更高效的框架设计的更多相关文章

  1. 客户端热更新框架之UI热更框架设计(下)

    上一篇笔者介绍了关于什么是热更新,为什么需要热更新的技术文章.本篇就专门针对UI框架的热更新功能实现部分展开讨论,讨论的重点是热更新如何与UI框架进行结合? 现在笔者把设计“UI热更新框架”的整体设计 ...

  2. 阿里面试:MySQL如何设计索引更高效?

    有情怀,有干货,微信搜索[三太子敖丙]关注这个不一样的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. ...

  3. 新书出版《.NET框架设计—模式、配置、工具》感恩回馈社区!

    很高兴我的第一本书由图灵出版社出版.本书总结了我这些年来对框架学习.研究的总结,里面纯干货,无半句废话. 书的详情请看互动网的销售页面:http://product.china-pub.com/377 ...

  4. Socket开发框架之框架设计及分析

    虽然在APP应用.Web应用.Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要的,如一些停车场终端设备的接入,农业或者水利.压力监测方面的设 ...

  5. 基于cocos2d-x的游戏框架设计——李成

    视频:http://v.youku.com/v_show/id_XMzc5ODUyMTI4.html?f=17330006 网易科技讯 3月31日,第四届CocoaChina开发者大会暨Cocos2d ...

  6. 25个让Java程序员更高效的Eclipse插件

    Eclipse提供了一个可扩展插件的开发系统.这就使得Eclipse在运行系统之上可以实现各种功能.这些插件也不同于其他的应用(插件的功能是最难用代码实现的).拥有合适的Eclipse插件是非常重要的 ...

  7. 浅谈JavaScript框架设计

    在这个js框架随处乱跑的时代,你是否考虑过写一个自己的框架?下面的内容也许会有点帮助. 一个框架应该包含哪些内容? 1.语言扩展 大部分现有的框架都提供了这部分内容,语言扩展应当是以ECMAScrip ...

  8. 自动化测试基础篇--Selenium框架设计(POM)

    一.自动化测试框架 感谢木棉花的漂泊分享,内容转自链接:http://www.cnblogs.com/fengyiru6369/p/8053035.html 1.什么是自动化测试框架 简单来说,自动化 ...

  9. 这些小工具让你的Android 开发更高效

    在做Android 开发过程中,会遇到一些小的问题.尽管自己动手也能解决.可是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一下Android 开发遇到的小工具,来让你的开发更高效. Vy ...

  10. python+selenium之框架设计

    一.自动化测试框架 1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境.自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本, ...

随机推荐

  1. NebulaGraph is nothing without you | 社区 2023 年度人物合集

    在去年的年度人物 回顾中,我们看到了形形色色的人们,他们当中有帮 NebulaGraph 捉 bug 的小能手,也有通过用回复来解答他人疑惑的启蒙者-在今年(2023 年),我们这个整点不一样的,将镜 ...

  2. SpringCloud Eureka基本使用

    1. 简介 Eureka是Netflix开发的服务发现框架,并被Spring cloud 收录 并封装成为其服务治理的模块实现 Eureka采用了CS的架构设计,分为 Server端 和 Client ...

  3. Spring事务(三)-事务传播行为

    在Spring里,一个事务方法被另外一个事务方法调用时,两个方法的事务应该如何进行,说白话一点,就是说当出现异常需要回滚时,各个方法的数据操作是否要全部回滚,事务传播行为就是决定了这样的一个处理结果. ...

  4. config.js 多人同步更新 解决方案 多项目公用一套config.js dev

    index.html <script type='text/javascript' src='<%= BASE_URL %>config.js?${Math.random().toS ...

  5. Linux 常见缩写命令英文全称

    linux 命令参考Linux 命令大全: https://man.linuxde.net/ awk = "Aho Weiberger and Kernighan" 三个作者的姓的 ...

  6. Web service是什么? (转载)

    转载自 : Web service是什么?- 阮一峰的网络日志 作者: 阮一峰 日期: 2009年8月26日 我认为,下一代互联网软件将建立在Web service(也就是"云") ...

  7. Lambda Web Browser使用教程

    Lambda web browser是一个功能强大的UE内置浏览器插件, 允许用户在编辑器模式和运行时启动一个浏览器窗口, 对于一些采用传统BS架构的项目而言, 控制页面都放在前段, 若想要将控制页面 ...

  8. XSS 从 PDF 中窃取数据

    XSS 从 PDF 中窃取数据 将服务器端 XSS 注入到动态生成的 PDF 中 在 hack the box 的 Book 机器(Scripting Track)上,我遇到了一个 Web 应用程序, ...

  9. 记录--产品:请给我实现一个在web端截屏的功能!

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.故事的开始 最近产品又开始整活了,本来是毫无压力的一周,可以小摸一下鱼的,但是突然有一天跟我说要做一个在网页端截屏的功能. 作为一个工 ...

  10. 记录--vue3 setup 中国省市区三级联动options最简洁写法,无需任何库

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在写页面的时候,发现表单里面有一个省市区的 options 组件要写,因为表单很多地方都会用到这个地址选择,我便以为很简单嘛. 虽然很简单 ...