OpenHarmony面向万物智联的应用框架的思考与探索

news2025/1/12 19:54:42

应用框架,是操作系统连接开发者生态,实现用户体验的关键基础设施。业务的飞速发展促进了应用框架不断演进和变化。

01►业界应用框架的演进

应用是用户使用操作系统/设备的入口,应用框架则是应用开发和运行的基础设施。以移动端为例,一个典型的应用结构一般包括用户界面、业务逻辑、共享库以及包清单文件等部分。

1.用户界面以及相应的业务处理逻辑。这里主要包括构建用户界面所需的 UI(User Interface)组件,布局,动效,事件交互响应处理,所需的资源(图片/字体等),以及结合 UI 呈现的业务逻辑处理等。从运行时的维度来看,它主要对应了系统运行环境中的 UI 框架(含语言运行时),以及部分的系统能力 API (Application Programming Interface);

2.共享库。这里主要包括开发者封装好的 SDK(Software Development Kit),以及使用的三方库等。从运行时维度来看,它主要对应了系统能力 API 以及语言运行时,如果共享库涉及 UI 的话,还对应了 UI 框架;

3.包清单文件。这里主要包括应用包的结构描述,权限声明等,它主要对应了系统运行环境中的包管理,应用生命周期/权限管理/进程管理等。其中,UI 框架的主要组成如下图所示:

■开发模型:对开发者提供的开发范式、UI 组件/API 能力、编程语言等,重点体现的是开发效率与难易程度;

■运行框架:UI 界面渲染及交互的基础能力框架,将开发者的程序运行在具体系统平台上,包括应用整体渲染处理流程,语言逻辑执行流程,以及平台能力扩展机制,重点体现的是应用运行的性能体验;

■平台适配:承载框架的具体操作系统或平台的适配层。

一般而言,应用框架中的包管理、生命周期/权限管理,和具体的操作系统关联较紧,并相对稳定;能力 API 则是操作系统对设备能力的封装,主要影响应用使用设备的能力。UI 框架以及相应的编程语言则是影响用户体验(包括开发和运行体验)的关键要素,尤其随着移动平台的不断普及以及移动设备的差异,移动平台上的 UI 框架(含编程语言)是业界不断演进的重点领域。

近十年来,业界 UI 编程框架围绕着更好的开发效率,更好的运行体验以及适应更多的平台不断发展演进。其中有三个关键的时间节点:

1.2013 年,Facebook 发布的 React.js 第一次综合的将数据绑定,虚拟 DOM(Document Object Model)等机制引入前端开发框架设计中。开发者只需声明好相应的数据和 UI 的绑定,之后由框架来跟踪数据的变化,并通过虚拟 DOM 树的对比找出变化点,从而实现界面的自动更新,而无需开发者手动基于 DOM 编程。

2.2018 年,Google 发布的 Flutter 则是个重要的分界点。Flutter 融合了 Dart 语言,是第一个深度融合了语言的较为完整的声明式开发框架,实现了完全通过数据驱动的 UI 变更。另外,Flutter 通过基于 Skia 的自绘制引擎实现了高性能的跨平台的平台一致性的渲染能力,并提供了 Hot Reload 机制提升开发测试体验。不过,Flutter 的整体设计哲学偏向底层的灵活性 – 主要通过底层的细粒度的能力供开发者自由组合,另外,Google 对 Dart 语言的简洁度的改进较少,整体上开发的简洁度以及对用户的友好度不足。

3.2019 年,Apple SwiftUI 的推出,意味着主流 OS 的原生应用框架开始逐步往声明式开发方式迁移。SwiftUI 推动了 Swift 语言特性扩展实现了更加简洁自然的 UI 描述,并通过 XCode 开发工具的所见即所得的高效预览能力进一步提升开发效率。同时,SwiftUI 也是真正意义上开始通过一套框架,逐步统一 Apple 生态中的不同的设备/OS 上的应用开发。另外,2019 年 Google 将更简洁的 Kotlin 语言升级为 Android 首选的编程语言,并在 2021 年推出基于 Kotlin 的应用框架 Jetpack Compose, 同时结合开发工具 Android Studio 逐步往多设备以及跨平台演进。

■总体而言,移动端应用框架的演进包含以下几个关键特征:从命令式 UI 开发逐步演进到声明式 UI 开发;

■UI 和编程语言的融合从相对松散演进到逐步紧密;

■开发范围从单设备演进到多设备,从单平台演进到多平台。

02►万物智联下的应用框架的架构设计思考

目前,在万物智联的新场景下,智能设备的数量和种类越来越多,场景也越来越复杂,存在着新需求和新挑战:1.设备间具有不同形态:各设备的屏幕不同,其分辨率、长宽、形状、尺寸等均不相同;2.设备自身的交互方式不同:存在触控、键鼠、遥控、语音、3D 手势等多种形式;3.设备间具有不同的能力:各设备的 CPU、GPU、NPU、蓝牙等处理能力不同,且 RAM、ROM 的规格也不相同;4.设备之间的交互方式也不相同:例如无缝流转、协同等。此外,跨 OS 平台,动态内容部署能力也是重要的需求。

如何设计相应的应用框架来应对挑战呢?以下将从语言选型和框架设计两个维度来讨论。

2.1►►语言选型

如图所示的排行榜显示了在 2012 年至 2022 年的区间里,最活跃、热度最高的前 20 名编程语言,由图可以看出 JavaScript 和 TypeScript 的排名是遥遥领先的,本身拥有非常好的生态基础。但是,JavaScript 和 TypeScript 也有一定的缺陷,比如缺失基于类型系统的运行时优化,AOT 能力,精细化类型以及细粒度的并行化等。

2.2►►框架设计

相应的,现有框架如 Web 引擎、React Native、Flutter 等在各自领域都具备一定的优势,但也存在性能体验及其与生态难平衡、HTML+CSS+JS 三段式开发方式和业界领先的声明式开发(SwiftUI)相比有较大差距的问题。

2.3►►设计思考

尽管业界在语言、框架等各领域都持续进行了相关改进,但始终缺乏系统性的跨越。对于单平台应用框架来说,需要解决开发效率(开发范式、语言、基础库、三方库、调试调优、预览等)、性能体验(性能、内存、功耗、能力完备度等)以及跨设备(不同设备的 UI 适配和能力适配)等核心问题;对于跨平台应用框架来说,需要解决不同平台的代码复用度、性能和体验不一致等核心问题。此外,还需要考虑动态化内容部署机制和应用部署等因素。

03►ArkUI 的创新和实践

OpenHarmony 应用框架围绕如何解决上述问题,设计了 ArkTS 开发语言以及 ArkUI 开发框架,下面将从语言和框架两个维度进行介绍。

3.1►►OpenHarmony 生态开发语言-ArkTS

OpenHarmony 生态开发语言 ArkTS 在 JavaScript 和 TypeScript 的基础上,围绕着极简表达、极致性能的最终目标进一步演进。改进了 JavaScript 和 TypeScript 的运行时,优化了类型信息,扩展了声明式 UI 语法,以及轻量级并行能力。后续会持续演进分布式、严格类型等相关能力。

3.2►►ArkUI 开发框架

ArkUI 整体架构如图所示。最上层提供了自研声明式 UI 范式,也支持类 Web 范式;中间层为方舟编译器和运行时、声明式 UI 后端引擎以及渲染引擎,下层为平台适配层和平台桥接层。此外,ArkUI 开发框架还配套了相应的 IDE 开发工具以及工具链,提升开发体验。

ArkUI 的声明式范式通过语法扩展方法,提供了装饰器、自定义组件、UI 描述、状态管理、内置组件、属性方法以及事件方法等模块,可以根据用户需求灵活组合,从而形成定制化界面。ArkUI 的声明式范式具备简洁自然声明式语法,统一 UI 表达;多态组件/动态布局,简化多设备 UI 适配;多维度状态管理,简化数据传递 &UI 变更等关键特征。其中,多维度状态管理包括组件、页面、全局以及分布式等多个维度,数据与 UI 间的传递方式也支持单向以及双向传递,以满足应用开发的相关诉求。

ArkUI 的运行机制如图所示。其中,以 ArkTS 语言开发的源代码,经过编译工具链和 ArkUI 框架 API 编译,形成中间代码,再通过方舟运行时形成 ArkUI 框架运行时。在整个渲染设计上,ArkUI 提供了扁平化渲染管线、按需渲染、数据绑定以及基于 PGO 的 AOT 等创新能力,提升用户体验以及渲染效率。在跨设备的设计上,ArkUI 提供了响应式组件+响应式能力的响应式布局能力以及自适应组件+自适应能力的自适应布局能力,并且在视觉交互侧也通过分层参数和主题风格、多态组件以及交互归一等进行了交互能力的增强。此外,ArkUI 支持部署至百 K 级、M 级的轻量化设备,通过引擎轻量化改造以及基于目标平台进一步轻量化定制,实现跨设备能力适配。

3.3►►ArkUI 生态

衡量一个应用框架最终是否成功,关键还是要看它对应用开发者生态影响的深度和广度。下图描述了 ArkUI 生态构建思路概览。

如图所示,自底向上,整体生态构建分为四个维度。

1.  框架。这层主要是框架本身的特性完备度以及竞争力,并能够满足关键应用的需求(包括关键自研应用和关键三方应用)。尤其是要通过关键垂类应用(比如电商,地图,游戏等)的突破来进一步完善框架本身。另外,当多个主流 OS 平台会长时间并存的情况下,跨 OS 平台是核心竞争力诉求。框架必须具备相应的能力来进一步提升开发效率。

2.  工具。这层主要是配套开发工具的完备度以及三方主流开发工具的支持度。DevEco 作为 ArkUI 的核心配套工具,需要在整体开发工作流进一步完善,同步,也需逐步推进和三方开发工具的整合,包括 VSCode, 基于 Chrome 浏览器的调试等,进一步方便开发者。

3.  社区。这层主要是通过相应的开源社区(开放原子开源基金会等),以及三方开源库,组件仓库等建设,以及结合主流的组件仓库 NPM(Node Package Manager)等推动 ArkUI 的三方组件的进一步完善。

4.  标准。这层主要是通过标准化的参与,来构建中长线影响力。包括 W3C 相关的标准组织(ArkUI 类 Web 范式的进一步标准化,WebAssembly 的融合探索等),ECMAScript 标准组织(ArkTS 的增强语言特性的进一步标准化等),软件绿色联盟(应用质量标准,原子化服务标准的完善/互通等)。

总之,ArkUI 的整体生态推进策略是以关键应用为牵引,逐步夯实相应能力构建,通过工具、社区协同,并布局标准培育中长线影响力。

04►未来规划

在未来的工作中,ArkUI 开发框架团队将持续围绕生态和竞争力逐步演进,包括跨平台能力、分层对接能力、跨设备适配能力、渲染能力、并行化/资源调度能力等进行增强,不断提高用户体验。期待大家一起助力鸿蒙生态,持续创新,使其能够更好地赋能万物智联新场景。

如果大家想更加深入的学习 OpenHarmony 开发的内容,不妨可以参考以下相关学习文档进行学习,助你快速提升自己:

OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源码解析》:https://qr18.cn/CgxrRy

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……

系统架构分析:https://qr18.cn/CgxrRy

  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy

在这里插入图片描述

OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1713497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

逍遥散人的“痛婚”,让《光夜》玩家悄悄破防了

网红博主的一场求婚,让《光与夜之恋》玩家破防了。 知名游戏博主逍遥散人发微博公布求婚成功,本来应该是一件喜事,但却因为求婚场景布满了《光与夜之恋》男主角之一陆沉的谷子(周边),遭到了“6推”&#x…

什么是组态?什么是工业控制中的组态软件?

随着工业4.0和智能制造的发展,工控软件的应用越来越广泛,它们在提高生产效率、降低能耗和减少人力成本等方面发挥着越来越重要的作用。 什么是工控软件? 工控软件是指用于工业控制系统的软件,主要应用于各种生产过程控制、自动化…

6种经典的网页布局设计,你最喜欢哪个?

信息时代,我们每天都会浏览很多网页,但你有没有想过,让你停留在一个新网页的关键因素有哪些?毫无疑问,网页布局一定是关键因素之一。一个优秀的网页布局不仅可以让网站看起来更美观、更专业,还能够抓住用户…

如何顺利通过软考中级系统集成项目管理工程师?

中级资格的软考专业包括"信息系统",属于软考的中级级别。熟悉软考的人都知道,软考分为初级、中级和高级三个级别,涵盖计算机软件、计算机网络、计算机应用技术、信息系统和信息服务五个专业,共设立了27个资格。本文将详…

代码随想录算法训练营第八天| 344.反转字符串、541. 反转字符串II、 卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

344.反转字符串 题目链接&#xff1a; 344.反转字符串 文档讲解&#xff1a;代码随想录 状态&#xff1a;so easy 题解&#xff1a; public void reverseString(char[] s) {int left 0, right s.length - 1;char temp s[0];while (left < right) {temp s[left];s[left] …

linux下常用的终端命令

文章目录 1. MV移动文件、重命名文件1.1 移动文件&#xff1a;mv [选项] 源文件或目录 目标文件或目录1.2 文件重命名 2. 查找&#xff1a;文件&#xff0c;内容&#xff0c;统计文件2.1 find查找文件2.2 Linux查找文件内容 3. 查看当前用户4. linux修改文件所属用户和组5. 复制…

MiniPCIe/SATA双用插槽无法识别minipcie模块怎么回事!

在计算机和嵌入式系统设计中,MiniPCIe/SATA双用插槽作为一种高度集成的解决方案,提供了极大的灵活性与扩展能力。它不仅能够支持MiniPCIe接口的无线网卡、固态硬盘控制器等模块,还能适应SATA接口的硬盘或固态存储设备,大大丰富了系统配置的可能性。尽管设计初衷良好,但在实…

【YOLO系列】YOLOv10模型结构详解与推理部署实现

点击开始系统化学习YOLOv系列网络 YOLOv10模型 早晨看到一堆推文&#xff0c;说YOLOv10已经发布了&#xff0c;吓我一跳&#xff0c;这个世界变化这么快&#xff0c; 然后快速的看一下相关的文档&#xff0c;发现YOLOv10 相比YOLOv8有两个最大的改变分别是 添加了PSA层跟CIB…

【AI赋能】香橙派OrangePi AIpro初体验

【AI赋能】香橙派OrangePi AIpro初体验 1、初识香橙派1.1、仪式感开箱1.2、OrangePi AIpro(8T)介绍 2、上电开机2.1、开机2.2、串口调试2.2.1 两种方式登录2.2.2 相关信息 2.3、启动系统2.4、网络配置 3、连接摄像头4、目标检测4.1、Jupyter Lab模式4.2、 目标检测测试4.2.1 视…

开一个抖音小店可以经营几个类目?经营几个类目最合适?

大家好&#xff0c;我是喷火龙。 抖音小店的商品类目和商品数量是没有限制的&#xff0c;只要是在营业执照的经营范围之内的类目都能入驻抖音小店&#xff0c;但是选择的主营类目不能超过三个。 有些商家可能会想&#xff0c;自己经营多个类目&#xff0c;做多种商品种类&…

梳理清楚的echarts地图下钻和标点信息组件

效果图 说明 默认数据没有就是全国地图&#xff0c; $bus.off("onresize")是地图容器变化刷新地图适配的&#xff0c;可以你们自己写 getEchartsFontSize是适配字体大小的&#xff0c;getEchartsFontSize(0.12) 12 mapScatter是base64图片就是图上那个标点的底图 Ge…

【Java SE】超详细讲解String类

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 初步认识String2. String类的常用方法2.1 字符串构造2.2 String对象比较2.2.1 比较是否引用同一个对象2.2…

3.4 移动机器人工作空间(摘自自主移动机器人导论2)

对于一个机器人来说&#xff0c;机动性等效于它的控制自由度。但是&#xff0c;机器人是处于某种环境的&#xff0c;因而下一个问题是把我们的分析放到环境之中。 我们关心机器人用它可控制的自由度在环境中定位它本身的方法。例如&#xff0c;考虑 Ackerman 车辆或汽车&#…

AI时代的服装设计师--AIGC

AI时代的服装设计师--AIGC AIGCAIGC设计能替代真正的设计师吗森马T恤设计AIGC优势、优化 本文记录于去年参加的一次森马T恤设计活动的感受。 AIGC 可以说&#xff0c;近期以来&#xff0c;随着ChatGPT的不断发展&#xff0c;从ChatGPT-3到ChatGPT-4的飞速发展&#xff0c;AIGC…

无人港口/码头兴起,可视化大屏功不可没。

码头/港口可视化大屏可以为管理上带来多方面的价值&#xff0c;包括但不限于&#xff1a; 1. 实时监控&#xff1a; 大屏可以将港口的各种数据、设备状态、船舶位置等信息实时展示&#xff0c;管理人员可以通过大屏随时监控港口的运营情况&#xff0c;及时发现并处理问题。 2…

香橙派AIpro初体验

1.开发板资料 开发板资源 产品介绍主页&#xff1a;http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.html开发板案例源码&#xff1a;https://gitee.com/ascend/EdgeAndRobotics工具&原理图&案例源码&开发手册&#x…

python知识继续学习

1、计算机表示小数是有误差的&#xff0c;下面的5就是误差 2、在python中&#xff0c;所有的非0数字都是True&#xff0c;零是False。所有的非空字符串都是True&#xff0c;空字符串是False。空列表是False。在python的基本数据类型中&#xff0c;表示空的东西都是False&#x…

代码随想录算法训练营Day 53| 动态规划part14 | 1143.最长公共子序列、1035.不相交的线 、53. 最大子序和 (动态规划 )

代码随想录算法训练营Day 53| 动态规划part14 | 1143.最长公共子序列、1035.不相交的线 、53. 最大子序和 &#xff08;动态规划 &#xff09; 文章目录 代码随想录算法训练营Day 53| 动态规划part14 | 1143.最长公共子序列、1035.不相交的线 、53. 最大子序和 &#xff08;动态…

量化交易:如何在QMT中运行Python策略并在VSCode中高效调试?

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 为何选择QMT和VSCode进行量化策略开发&#xff1f; 在量化交易的世界里&#xff0c;选择正确的工具与拥有优秀的策略同等重要。调用用Visual Studio Code&#xff08;简称VSCode&#xff09;或pycharm&#xff0c;方…

10种排序算法总结-(c语言实现与动画演示)

算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。非比较类排序&#xff1a;不通过比较来决定元素间的相对次序&#…