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

鸿蒙学习总结

       鸿蒙(HarmonyOS),做为国产自主研发设计的第一个操作系统,从开放测试以来一直备受关注。其纯血鸿蒙版(HarmonyOS NEXT)也于进日发布。过去的一段时间里,我站在一个移动开发者的角度对HarmonyOS进行了系统性的了解与基础性的学习。前段时间通过 WebView加载 H5 的方式上架了一款应用。接下来我将以个人的理解对目前已知的鸿蒙知识做一个简单的总结。

  • HarmonyOS架构图

        以上就是鸿蒙系统的架构图,从下到上。内核层使用的是自主研发的 LiteOS,Next版本则是彻底替换掉了 Linux。纯血鸿蒙发布之前的鸿蒙系统兼容 Android 应用一个是由于Linux另一个则是使用了虚拟机运行。

        系统服务层是鸿蒙核心能力的集合,分布式任务调度对应用的任务进行管理,根据设备的性能、负载等情况,将任务合理地分配到不同的设备上执行,提高系统的整体性能和效率。例如,在玩大型游戏时,可以将一部分计算任务分配到性能更强的设备上进行处理。

        分布式数据管理实现了数据在不同设备之间的分布式存储、同步和访问。不同设备上的应用可以方便地访问和操作其他设备上的数据,保证了数据的一致性和完整性。比如,用户在手机上编辑的文档,可以实时同步到平板上继续编辑。

        分布式软总线,这是鸿蒙系统实现分布式能力的关键技术之一,负责在不同设备之间建立高速、低时延、安全可靠的通信通道,使得设备之间能够像一个整体一样协同工作,实现设备间的无缝连接和数据传输。例如,手机可以通过分布式软总线快速连接到智慧屏、平板等设备,实现多屏协同、文件互传等功能。

       方舟多语言运行时子系统 提供了 C、C++、JS 等多语言的运行时环境和基础的系统类库,为应用程序的运行提供了支持。

        公共基础库子系统包含了一些通用的基础功能模块和算法,如字符串处理、数学运算、加密解密等,为系统的各个部分提供基础的功能支持。

        还有多模型,图形,安全,AI ,穿戴,智慧屏这些子系统构建了完整的鸿蒙生态。

        框架层中 UI框架(ArkUI方舟开发框架)是一套构建分布式应用界面的声明式UI开发框架。用户程序框架主要指多语言支持,支持 Java、C/C++、ArkTS;Ability框架是应用所具备能力的抽象,是应用程序的重要组成部分。一个应用可以包含一个或多个 Ability,它是鸿蒙系统中应用程序的基本执行单元,用于实现特定的业务功能。

  • ArkTS编程语言

        ArkTS是开发应用程序的重要语言,它是基于 TypeScript 进行扩展的语言,主要用于构建具有声明式用户界面(UI)的应用。

        语法特点:声明式 UI 描述、自定义组件、动态扩展 UI 元素、状态管理和渲染控制。

声明式 UI 描述的例子:

  • @Entry 和 @Component 注解表示这是一个可作为应用入口的组件。
  • @State 注解的 message 变量用于存储要显示的文本,当这个变量的值发生变化时,会自动触发 UI 的更新。
  • build 方法中使用 Column 布局组件来垂直排列子组件。
  • 首先显示一个 Text 文本组件,内容为 message 变量的值,并设置了字体大小和上边距。
  • 然后有一个 Button 按钮组件,文本为 “Change Message”,当点击按钮时,会调用 onClick 中的函数,将 message 的值修改为 “Message changed!”,从而触发 UI 的更新,显示新的文本内容。

自定义组件例子:

  • 首先定义了一个名为CustomButton的自定义组件。
    • 它接受两个属性textcolor,分别用于设置按钮上的文本和背景颜色,默认颜色为#007AFF
    • build方法中,创建一个按钮,并设置其文本为传入的text属性值,背景颜色为传入的color属性值,以及字体大小为 16。
  • 然后定义了一个名为MyComponent的组件作为入口。
    • build方法中,使用Column布局组件垂直排列子组件。
    • 两次使用CustomButton组件,传入不同的textcolor属性值,创建两个不同样式的自定义按钮。

动态扩展 UI元素例子:

在这个例子中:

  • 定义了一个名为DynamicUI的组件。
  • @State声明了两个状态变量:items是一个字符串数组,初始值为一个元素;showMore是一个布尔值,用于控制是否显示额外的文本。
  • addItem方法用于向items数组添加新的元素。
  • toggleShowMore方法用于切换showMore的值。
  • build方法中:
    • 使用Column布局组件。
    • 通过ForEach遍历items数组,为每个元素创建一个Text文本组件并显示。
    • 根据showMore的值决定是否显示 “More items are shown.” 的文本。
    • 有两个按钮,一个用于添加新元素,一个用于切换显示状态。

这样,当点击 “Add Item” 按钮时,会动态地向 UI 中添加新的元素;当点击 “Toggle Show More” 按钮时,会动态地显示或隐藏额外的文本内容,实现了动态扩展 UI 元素。

状态管理和渲染控制例子

在这个例子中:

  • 定义了两个状态变量countshowMessage
  • incrementCount方法用于增加count的值,并且当count是 5 的倍数时,将showMessage设置为true,否则设置为false
  • build方法中:
    • 使用Column布局组件。
    • 显示count的值和一个根据showMessage状态决定是否显示的文本。
    • 有一个按钮,点击时调用incrementCount方法来更新状态并触发 UI 的重新渲染。

通过这种方式,实现了状态管理和基于状态的渲染控制。当状态变量count变化时,会自动更新 UI 上显示的数值,并且根据特定条件控制是否显示额外的文本信息。

        从以上例子可以看到,ArkTS的声明式开发模式比传统更加高效,不需要编写大量代码处理 UI 页面。与 JS 对比,JS通常需要依赖复杂的 DOM操作来更新 UI,ArkTS 则通过更直接的渲染机制,省去了部分中间的 DOM 管理环节,使得渲染更新链路更为精简,占用内存更少,从而提供更好的应用性能,同时也增加了可读性。

        学习 ArkTS可以按照以下流程:

  1.  熟练掌握基础语法;
  2. 了解鸿蒙系统的基础知识;
  3. 学习声明式 UI语法;
  4. 掌握自定义组件开发;
  5. 深入理解 ArkTS 中的状态管理机制。掌握响应式编程;
  6. 学习数据绑定和动态 UI 更新;
  7. 掌握分布式应用开发特性;
  • Ability介绍

        Ability 是鸿蒙操作系统中应用程序所具备能力的抽象,是应用开发的基本单元。它类似于安卓系统中的 Activity、Service 等组件,但又具有更灵活和广泛的功能。一个鸿蒙应用可以包含一个或多个 Ability,每个 Ability 都能独立地实现特定的业务功能,这些功能可以是面向用户的交互功能,也可以是在后台运行的服务功能等。

类型与功能:

  • Feature Ability(FA)
    • 用户交互功能:这是具有用户界面的 Ability 类型,主要用于和用户进行交互。例如,在手机应用中,用户看到的各种界面如登录界面、主界面、设置界面等通常都是由不同的 Feature Ability 实现的。
    • 页面管理与跳转:FA 提供了 Page Ability,用于构建应用的页面。多个 Page Ability 之间可以通过路由机制进行页面跳转。这使得应用能够根据用户的操作,如点击按钮、滑动屏幕等,在不同的页面之间进行切换,以实现复杂的业务逻辑和用户流程。例如,在购物应用中,从商品列表页面跳转到商品详情页面,再跳转到购物车页面等操作都是通过 Page Ability 的路由来实现的。
  • Particle Ability(PA)
    • Service Ability
      • 后台任务执行:这种类型的 Ability 主要在后台运行任务。例如,当用户在音乐播放应用中切换到后台时,音乐播放的任务可以通过 Service Ability 继续执行,而不会因为应用界面不可见而中断。它还可以用于执行文件下载、数据同步等任务。比如,应用可以在后台使用 Service Ability 持续从服务器下载更新文件,而用户可以同时进行其他操作。
      • 跨应用协作:Service Ability 还可以用于跨应用的协作。不同的应用可以通过连接到同一个 Service Ability 来共享服务或进行数据交互。例如,一个地图应用和一个打车应用可以通过共享位置相关的 Service Ability 来实现更好的用户体验。
    • Data Ability
      • 数据访问与管理:Data Ability 用于对外部提供统一的数据访问抽象。它支持数据的存储、查询、修改等操作。应用可以通过 Data Ability 来管理自己的数据,如用户信息、配置数据等。并且,Data Ability 可以实现跨设备、跨应用的数据共享。例如,一个笔记应用可以通过 Data Ability 存储用户的笔记内容,并且在用户的其他设备上,通过相同的 Data Ability 可以访问和修改这些笔记。

        生命周期管理:

  • 创建阶段(onCreate):当 Ability 被创建时,会调用onCreate方法。这个阶段主要用于进行一些初始化的操作,如加载资源、初始化变量等。例如,在一个游戏应用的 Feature Ability 中,onCreate阶段可以用于加载游戏的地图、角色模型等资源。
  • 启动阶段(onStart):在 Ability 启动时,onStart方法被调用。这个阶段可以用于准备展示界面或者启动后台任务等操作。对于 Feature Ability,可能会涉及到界面的布局加载;对于 Service Ability,可能会开始执行后台任务。
  • 激活阶段(onActive):当 Ability 处于活动状态时,onActive方法会被调用。对于有用户界面的 Feature Ability,这个阶段表示用户正在与该界面进行交互;对于 Service Ability,这个阶段表示其正在高效地执行后台任务。例如,在音乐播放应用的 Service Ability 中,onActive阶段可以用于确保音乐播放的流畅性。
  • 暂停阶段(onInactive):当 Ability 失去焦点但仍可能恢复时,进入暂停阶段,onInactive方法被调用。例如,当用户切换到其他应用,但原应用的 Service Ability 还在运行时,这个 Service Ability 就可能进入暂停阶段。此时,可以进行一些资源的暂时释放或者降低任务执行的优先级等操作。
  • 停止阶段(onStop):当 Ability 完全停止时,onStop方法被调用。这个阶段可以用于释放资源,如关闭文件、释放内存等。例如,当一个后台下载文件的 Service Ability 完成下载任务后,如果不再需要,就可以在onStop阶段进行资源释放。
  • 销毁阶段(onDestroy):当 Ability 被销毁时,onDestroy方法会被调用。这个阶段主要用于最后的资源清理工作,如删除临时文件、注销监听器等。

其它:

  • 鸿蒙的打包流程也与 Android 不同,鸿蒙应用主要打包成 HAP(HarmonyOS Ability Package)格式;签名也比 Android 多几个步骤,具体的签名打包方式都有详细的说明。
  • 鸿蒙模拟器对比 Android studio  模拟器来说更加流畅,强大。

相关文章:

鸿蒙学习总结

鸿蒙(HarmonyOS),做为国产自主研发设计的第一个操作系统,从开放测试以来一直备受关注。其纯血鸿蒙版(HarmonyOS NEXT)也于进日发布。过去的一段时间里,我站在一个移动开发者的角度对HarmonyOS进…...

如何修改文件创建时间?六个超简单修改方法介绍

怎么修改文件创建时间?在信息安全与隐私保护的领域里,每一个细节都可能成为泄露敏感信息的突破口。文件的创建时间,这个看似微不足道的数据点,实则可能蕴含着重要的时间线索,对于不希望被外界窥探其内容或来源的个人及…...

【MySQL 保姆级教学】内置函数(9)

内置函数 1. 日期函数1.1 日期函数的种类1.2 示例1.3 日期的转换 2. 字符串函数2.1 种类2.2 示例 3. 数学函数3.1 种类3.2 向上取整和向下取整3.3 示例 4. 其他函数4.1 查询当前用户/数据库4.2 ifnull(val1,val2)4.3 md5()函数4.4 password()函数 1. 日期函数 1.1 日期函数的种…...

华为大咖说丨如何通过反馈机制来不断优化大模型应用?

本文分享自时习知 作者:袁泉(华为AI数据工程专家)全文约3015字,阅读约需8分钟 大模型应用正式投入使用后,存在一个较为普遍的情况:在利用“大模型提升业务运营效率”的过程中,业务部门和IT团队…...

上海亚商投顾:沪指缩量震荡 风电、传媒股集体走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天缩量震荡,三大指数集体收涨,北证50则跌超7%,超80只北交所个股跌逾…...

三磺酸-Cy3.5-羧酸在水相环境中表现良好,能够提高成像的清晰度和准确性

一、基本信息 中文名称:三磺酸-Cy3.5-羧酸,水溶性Cy3.5 羧基 英文名称:trisulfo-Cy3.5-carboxylic acid,trisulfo-Cy3.5-COOH,trisulfo-Cyanine3.5-COOH 分子式:C41H44N2NaO11S3- 分子量:85…...

国标GB28181视频平台EasyGBS国标GB28181软件实现无需插件的视频监控对讲和网页直播

在当今社会,视频监控已经成为公共安全、企业管理、智能城市建设等领域不可或缺的一部分。然而,由于不同厂家和平台之间的兼容性问题,视频监控系统的联网和整合面临巨大挑战。为了解决这个问题,国家制定了《公共安全视频监控联网系…...

mac nwjs程序签名公证(其他mac程序也一样适用)

为什么需要公证 mac os14.5之后的系统,如果不对应用进行公证,安装,打开,权限使用上都会存在问题,而且有些问题你强制开启(sudo spctl --master-disable)使用后可能会有另外的问题, …...

网络应用技术 实验一:路由器实现不同网络间通信(华为ensp)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验任务及要求 1、任务 1:完成网络部署 2、任务 2:设计全网IP 地址 3、任务 3:实现全网主机互通 六、实验步骤 1、在ensp中部署网络 2、配置各主机 IP地址、子网掩…...

使用 Qt GRPC 构建高效的 Trojan-Go 客户端:详细指南

使用 Qt GRPC 构建高效的 Trojan-Go 客户端:详细指南 初识 Qt 和 gRPC 什么是 Qt?什么是 gRPC? 项目结构概述创建 proto 文件定义 API 下载 api.proto 文件解析 proto 文件 1. package 与 option 语句2. 消息类型定义 TrafficSpeedUserUserSt…...

【mysql进阶】5-事务和锁

mysql 事务基础 1 什么是事务 事务是把⼀组SQL语句打包成为⼀个整体,在这组SQL的执⾏过程中,要么全部成功,要么全部失败,这组SQL语句可以是⼀条也可以是多条。再来看⼀下转账的例⼦,如图: 在这个例⼦中&a…...

指增和中性产品的申赎加减仓及资金调拨自动化伪代码思路

定义一些关键字代表的意义 STRUCT: 代表需要输入的格式化的信息IMPORT: 代表需要输入的外部信息, 这些信息通常是客观的SEARCH: 需要从某地比如数据库检索搜集信息SUM: 一种宏观的加和操作, 比如两个股票户ABAB,微观上实际还是有差异GROUP: …...

【论文分享】居住开放空间如何影响老年人的情感:使用可穿戴传感器的现场实验

本研究首次通过跟踪实时、高分辨率的环境暴露和情绪反应来研究和比较不同质量住宅社区中的居住开放空间(ROS)与老年人情绪之间关联;并采用混合方法,包括可穿戴传感器和问卷调查,收集了中国广州老年居民的客观和主观住宅…...

入门 | Prometheus+Grafana 普罗米修斯

#1024程序员节|征文# 一、prometheus介绍 1、监控系统组成 一个完整的监控系统需要包括如下功能:数据产生、数据采集、数据存储、数据处理、数据展示、分析、告警等。 (1)、数据来源 数据来源,也就是需要监控的数据…...

制作Ubuntu根文件系统

制作Ubuntu根文件系统: gunzip ubuntu-base-22.04.5-base-arm64.tar.gz mkdir ubuntu tar xvpf ubuntu-base-22.04.5-base-arm64.tar -C ubuntu 挂载目录、复制dns、执行chroot cd /userdisk/ubuntu cp /etc/resolv.conf ./etc/resolv.conf mount --bind /dev ./d…...

16个最佳测试管理工具(2024)

1、前言 测试管理解决方案能够帮助你捕捉测试需求、设计测试用例、生成测试执行报告、管理资源等。软件质量的疏忽可能导致公司遭受巨大的经济损失、声誉损害或面临诉讼风险。一个优秀的测试管理工具是防止缺陷和故障进入生产环节的关键。 2、PractiTest ​ 功能特点&#x…...

基于知识图谱的猕猴桃种植技术问答系统

猕猴桃怎么种植更高效、病虫害怎么防治、最适宜的气候条件有哪些?作为一名科技研发迷,这些问题是不是听起来很有挑战性?咱们今天就来聊聊一个特别的研发项目——基于知识图谱的猕猴桃种植技术问答系统。这不仅仅是一个农业项目,它…...

Swift雨燕蜂窝无线通信系统介绍

本文博客链接:jdh99-CSDN博客,作者:jdh,转载请注明. 1. 概述 物联网小无线通信技术众多,其中大多是小范围小规模的无线通信技术,而行业难点是如何做到广覆盖、大容量、低功耗。 针对以上难点,宏讯物联研发了Swift雨燕蜂窝无线通信技术&…...

【ZZULI】数据库第二次实验

【ZZULI】数据库第二次实验 创建学生信息管理系统的数据库通过T-SQL语句创建学生表、课程表、选课表创建学生表创建课程表创建选课表 修改表结构。为SC表添加写的列,列名为备注修改备注列的数据长度。删除SC表的备注列。 通过T-SQL语句对表的列添加约束,…...

Javaee---多线程(一)

文章目录 1.线程的概念2.休眠里面的异常处理3.实现runnable接口4.匿名内部类子类创建线程5.匿名内部类接口创建线程6.基于lambda表达式进行线程创建7.关于Thread的其他的使用方法7.1线程的名字7.2设置为前台线程7.3判断线程是否存活 8.创建线程方法总结9.start方法10.终止&…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

免费批量Markdown转Word工具

免费批量Markdown转Word工具 一款简单易用的批量Markdown文档转换工具,支持将多个Markdown文件一键转换为Word文档。完全免费,无需安装,解压即用! 官方网站 访问官方展示页面了解更多信息:http://mutou888.com/pro…...

以太网PHY布局布线指南

1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...

后端下载限速(redis记录实时并发,bucket4j动态限速)

✅ 使用 Redis 记录 所有用户的实时并发下载数✅ 使用 Bucket4j 实现 全局下载速率限制(动态)✅ 支持 动态调整限速策略✅ 下载接口安全、稳定、可监控 🧩 整体架构概览 模块功能Redis存储全局并发数和带宽令牌桶状态Bucket4j Redis分布式限…...