鸿蒙开发框架(ArkUI)简单解析

news2024/12/23 1:17:44

方舟开发框架(简称ArkUI)为HarmonyOS应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界面开发。

基本概念

  • UI:即用户界面。开发者可以将应用的用户界面设计为多个功能页面,每个页面进行单独的文件管理,并通过页面路由API完成页面间的调度管理如跳转、回退等操作,以实现应用内的功能解耦。
  • 组件:UI构建与显示的最小单位,如列表、网格、按钮、单选框、进度条、文本等。开发者通过多种组件的组合,构建出满足自身应用诉求的完整界面。

两种开发范式

针对不同的应用场景及技术背景,方舟开发框架提供了两种开发范式,分别是基于ArkTS的声明式开发范式(简称“声明式开发范式”)和兼容JS的类Web开发范式(简称“类Web开发范式”)。

  • 声明式开发范式:采用基于TypeScript声明式UI语法扩展而来的ArkTS语言,从组件、动画和状态管理三个维度提供UI绘制能力。
  • 类Web开发范式:采用经典的HML、CSS、JavaScript三段式开发方式,即使用HML标签文件搭建布局、使用CSS文件描述样式、使用JavaScript文件处理逻辑。该范式更符合于Web前端开发者的使用习惯,便于快速将已有的Web应用改造成方舟开发框架应用。

在开发一款新应用时,推荐采用声明式开发范式来构建UI,主要基于以下几点考虑:

  • 开发效率:声明式开发范式更接近自然语义的编程方式,开发者可以直观地描述UI,无需关心如何实现UI绘制和渲染,开发高效简洁。
  • 应用性能:如下图所示,两种开发范式的UI后端引擎和语言运行时是共用的,但是相比类Web开发范式,声明式开发范式无需JS框架进行页面DOM管理,渲染更新链路更为精简,占用内存更少,应用性能更佳。
  • 发展趋势:声明式开发范式后续会作为主推的开发范式持续演进,为开发者提供更丰富、更强大的能力。

图1 方舟开发框架示意图

不同应用类型支持的开发范式

根据所选用HarmonyOS应用模型(Stage模型、FA模型)和页面形态(应用或服务的普通页面、卡片)的不同,对应支持的UI开发范式也有所差异,详见下表。

应用模型页面形态支持的UI开发范式
Stage模型(推荐)应用或服务的页面声明式开发范式(推荐)
卡片声明式开发范式(推荐)类Web开发范式
FA模型应用或服务的页面声明式开发范式类Web开发范式
卡片类Web开发范式

ArkTS声明式开发范式

基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建HarmonyOS应用UI所必需的能力,主要包括:

  • ArkTSArkTS是HarmonyOS优选的主力应用开发语言,围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展。扩展能力包含声明式UI描述、自定义组件、动态扩展UI元素、状态管理和渲染控制。状态管理作为基于ArkTS的声明式开发范式的特色,通过功能不同的装饰器给开发者提供了清晰的页面更新渲染流程和管道。状态管理包括UI组件状态和应用程序状态,两者协作可以使开发者完整地构建整个应用的数据更新和UI渲染。ArkTS语言的基础知识请参考学习ArkTS语言。
  • 布局布局是UI的必要元素,它定义了组件在界面中的位置。ArkUI框架提供了多种布局方式,除了基础的线性布局、层叠布局、弹性布局、相对布局、栅格布局外,也提供了相对复杂的列表、宫格、轮播。
  • 组件组件是UI的必要元素,形成了在界面中的样子,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。系统内置组件包括按钮、单选框、进度条、文本等。开发者可以通过链式调用的方式设置系统内置组件的渲染效果。开发者可以将系统内置组件组合为自定义组件,通过这种方式将页面组件化为一个个独立的UI单元,实现页面不同单元的独立创建、开发和复用,具有更强的工程性。
  • 页面路由和组件导航应用可能包含多个页面,可通过页面路由实现页面间的跳转。一个页面内可能存在组件间的导航如典型的分栏,可通过导航组件实现组件间的导航。
  • 图形方舟开发框架提供了多种类型图片的显示能力和多种自定义绘制的能力,以满足开发者的自定义绘图需求,支持绘制形状、填充颜色、绘制文本、变形与裁剪、嵌入图片等。
  • 动画动画是UI的重要元素之一。优秀的动画设计能够极大地提升用户体验,框架提供了丰富的动画能力,除了组件内置动画效果外,还包括属性动画、显式动画、自定义转场动画以及动画API等,开发者可以通过封装的物理模型或者调用动画能力API来实现自定义动画轨迹。
  • 交互事件交互事件是UI和用户交互的必要元素。方舟开发框架提供了多种交互事件,除了触摸事件、鼠标事件、键盘按键事件、焦点事件等通用事件外,还包括基于通用事件进行进一步识别的手势事件。手势事件有单一手势如点击手势、长按手势、拖动手势、捏合手势、旋转手势、滑动手势,以及通过单一手势事件进行组合的组合手势事件。

特点

  • 开发效率高,开发体验好
  • 代码简洁:通过接近自然语义的方式描述UI,不必关心框架如何实现UI绘制和渲染。
  • 数据驱动UI变化:让开发者更专注自身业务逻辑的处理。当UI发生变化时,开发者无需编写在不同的UI之间进行切换的UI代码, 开发人员仅需要编写引起界面变化的数据,具体UI如何变化交给框架。
  • 开发体验好:界面也是代码,让开发者的编程体验得到提升。
  • 性能优越
  • 声明式UI前端和UI后端分层:UI后端采用C++语言构建,提供对应前端的基础组件、布局、动效、交互事件、组件状态管理和渲染管线。
  • 语言编译器和运行时的优化:统一字节码、高效FFI-Foreign Function Interface、AOT-Ahead Of Time、引擎极小化、类型优化等。
  • 生态容易快速推进能够借力主流语言生态快速推进,语言相对中立友好,有相应的标准组织可以逐步演进。

整体架构

图1 整体架构图

  • 声明式UI前端提供了UI开发范式的基础语言规范,并提供内置的UI组件、布局和动画,提供了多种状态管理机制,为应用开发者提供一系列接口支持。
  • 语言运行时选用方舟语言运行时,提供了针对UI范式语法的解析能力、跨语言调用支持的能力和TS语言高性能运行环境。
  • 声明式UI后端引擎后端引擎提供了兼容不同开发范式的UI渲染管线,提供多种基础组件、布局计算、动效、交互事件,提供了状态管理和绘制能力。
  • 渲染引擎提供了高效的绘制能力,将渲染管线收集的渲染指令,绘制到屏幕的能力。
  • 平台适配层提供了对系统平台的抽象接口,具备接入不同系统的能力,如系统渲染管线、生命周期调度等。

开发流程

使用UI开发框架开发应用时,主要涉及如下开发过程。开发者可以先通过第一个入门实例了解整个应用的UI开发过程。

任务简介相关指导
学习ArkTS介绍了ArkTS的基本语法、状态管理和渲染控制的场景。基本语法状态管理渲染控制
开发布局介绍了几种常用的布局方式以及如何提升布局性能。常用布局布局性能
添加组件介绍了几种常用的内置组件、自定义组件以及通过API方式支持的界面元素。常用组件自定义组件气泡和菜单
设置页面路由和组件导航介绍了如何设置页面路由以及组件间的导航。页面路由组件导航
显示图形介绍了如何显示图片、绘制自定义几何图形以及使用画布绘制自定义图形。图片几何图形画布
使用动画介绍了组件和页面使用动画的典型场景。页面内的动画页面间的动画
绑定事件介绍了事件的基本概念和如何使用通用事件和手势事件。通用事件手势事件
  • 基本语法
  • 状态管理
  • 渲染控制

开发布局介绍了几种常用的布局方式以及如何提升布局性能。

  • 常用布局
  • 布局性能

添加组件介绍了几种常用的内置组件、自定义组件以及通过API方式支持的界面元素。

  • 常用组件
  • 自定义组件
  • 气泡和菜单

设置页面路由和组件导航介绍了如何设置页面路由以及组件间的导航。

  • 页面路由
  • 组件导航

显示图形介绍了如何显示图片、绘制自定义几何图形以及使用画布绘制自定义图形。

  • 图片
  • 几何图形
  • 画布

使用动画介绍了组件和页面使用动画的典型场景。

  • 页面内的动画
  • 页面间的动画

绑定事件介绍了事件的基本概念和如何使用通用事件和手势事件。

  • 通用事件
  • 手势事件

本文主要解析了鸿蒙开发中的UI技术,开发框架(ArkUI)的简单概述。更多的鸿蒙进阶技术 UI开发技术,可千万主页查看更多类容,或找技术交流。

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

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

相关文章

Jetson Xavier NX开发环境配置——编译libusb-1.0.9

背景 新买的Jetson Xavier NX 8G微雪的开发板,刷机后虽然已经带了libusb的库,在命令窗口输入lsusb也能够找到usb设备。但是,光机的usb配置说明中提示最好把老版本的libusb卸载掉,安装libusb-1.0.9版本,因此&#xff0…

【语义分割数据集】——imagenet语义分割

地址:https://github.com/LUSSeg/ImageNet-S 1 例图 2. 类别和数量信息 疑问 根据原文的描述:Based on the ImageNet dataset, we propose the ImageNet-S dataset with 1.2 million training images and 50k high-quality semantic segmentation annot…

【Vue第5章】vuex_Vue2

目录 5.1 理解vuex 5.1.1 vuex是什么 5.1.2 什么时候使用vuex 5.1.3 案例 5.1.4 vuex工作原理图 5.2 vuex核心概念和API 5.2.1 state 5.2.2 actions 5.2.3 mutations 5.2.4 getters 5.2.5 modules 5.3 笔记与代码 5.3.1 笔记 5.3.2 23_src_求和案例_纯vue版 5.3…

2023年12月12日 Go生态洞察:探索不可达函数与`deadcode`工具

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

现代雷达车载应用——第2章 汽车雷达系统原理 2.5节 检测基础

经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.5 检测基础 对于要测试目标是否存在的雷达测量,可以假定下列两个假设之一为真: •H0:—测量结果仅为噪声。 •H1:—测量是噪…

波奇学Linux:环境变量,本地变量和内建命令

Windows下的环境变量 echo $PATH 查看指令搜索命令路径 在bash命令行输入的指令,系统根据PATH中的路径查询。 增加PATH指令 $PATH等于上面的路径 :表示不同路径分割符 /home/boki/lesson13代表新的路径 相当于一个赋值语句。 相当于指令,可以直接使用…

一张图片组合一组动作就可以生成毫无违和感的视频!

你敢信,1张人物图片 1张动作动画,就可以生成一段视频。网友直呼:“主播/视频UP主可能快要下岗了!” (模型视频来源于网络) 本周,字节跳动联合新加坡国立大学发布了一款开源项目 MagicAnimate&…

超声波测距HC-SR04模块的简单应用

文章目录 一、HC-SR04HC-SR04是什么?HC-SR04测距的原理 二、使用步骤1.硬件最远探测距离调节硬件连接 2.软件1.初始化配置代码如下(示例):引脚初始化定时器初始化 2.引脚输入输出配置代码如下(示例)&#x…

verilog基础,连续赋值之组合逻辑

连续赋值语句可以完成任意组合逻辑,本节对基本的逻辑电路进行测试分析,主要包含一下内容: 1. 反相器 2. 与门 3.与非门 4.或门 5.或非门 6.异或门 7.同或门 verilog实现逻辑操作的算符如下 // ~ .... Invert a single-bit signal…

【网络通信原理之套接字】

目录 概念 分类 数据报套接字:使用传输层UDP协议 流套接字:使用传输层TCP协议 原始套接字 Socket编程注意事项 前言:本文主要介绍了在什么是套接字及在Java中套接字是什么,和在套接字编程的注意事项。 概念 Socket套接…

Postman接口测试工具使用

一、前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性。而这要求前端开发进度和后端进度保持基本一致,任何一方的进度跟不上,都无法及…

K8S(四)—pod详解

目录 pod介绍Pod的概念:Pod的特性:Pod的配置:Pod的控制:示例 YAML 文件: pod启动流程问题 两种方式启动镜像的升级和回滚更新 Deployment:回滚检查 Deployment 历史版本回滚到之前的修订版本缩放 Deploymen…

进程概念【linux】

进程基础 在学习进程之前,首先要有一定的计算机硬件和软件基础。 硬件基础:冯诺依曼体系结构 如图,是计算机在硬件上的体系结构。 下面举出一些常见的输入输出设备(有些设备只作输出设备,或者只作输入设备&#xff…

基于Leaflet的Webgis经纬网格生成实践

目录 前言 一、Leaflet.Graticule 1、参数说明 二、集成使用 1、新建网页模板 2、初始化地图对象 3、运行效果 三、源码调用分析 1、参数注入 2、经纬网构建 总结 前言 众所周知,在地球仪上或地图上,经线和纬线相互交织,就构成经纬…

复旦微固化流程

生成boot.bin 如图所示,psoc下的create boot image,选择文件配置路径output bif,任意命名 点击右侧add,分别添加三部分 1.编译FSBL工程后SDK\system_platform\FSBL\Debug\Exe路径下的FSBL.out 2.PL侧的bit文件 3.编译工程后SDK\sy…

关于对RF射频方面性能要求各有不同

1.1 射频天线性能 对于一个射频设备每个公司对其合格指标要求都不一,有些公司注重于阻抗及电压驻波,有些公司注重与回波损耗及阻抗、有些只关注电压驻波。 1.2 射频的目的 其实射频天线的目的就是在不把无用的杂散放大超标准的前提下,把有用…

穿梭时光的Java魔法:轻松掌握Date类,揭示当前时间的神秘面纱!

一、实现目标 获取当前时间! 二、上代码 import java.text.SimpleDateFormat; import java.util.Date; public class Date_ { // 输出当前的时间 public static void main(String[] arg…

项目总结-自主HTTP实现

终于是写完了,花费了2周时间,一点一点看,还没有扩展,但是基本功能是已经实现了。利用的是Tcp为网络链接,在其上面又写了http的壳。没有使用epoll,多路转接难度比较高,以后有机会再写&#xff0c…

大数据技术8:StarRocks极速全场景MPP数据库

前言:StarRocks原名DorisDB,是新一代极速全场景MPP数据库。StarRocks 是 Apache Doris 的 Fork 版本。StarRocks 连接的多种源。一是通过这个 CDC 或者说通过这个 ETL 的方式去灌到这个 StarRocks 里面;二是还可以去直接的和这些老的 kafka 或…

图的导航-最短路径算法-深度优先遍历

介绍 最短路径:从起点开始访问所有的路径,到达终点的路径有多条,其中路径的权值最短的一条则为最短路径。 最短路径算法有深度优先遍历、广度优先遍历、Bellman-Ford算法、弗洛伊德算法、SPFA算法、迪杰斯特拉算法等。 而本篇讲的是利用深…