【共创季稿事节】从 HarmonyOS 6.1 到 HarmonyOS 7.0:开发范式演进、创新能力实践与跨设备开发思考
摘要
从 2019 年 HarmonyOS 首次发布至今,鸿蒙生态已经逐渐完成了从「分布式操作系统」理念提出,到「HarmonyOS NEXT 全栈自研生态」逐步落地的发展历程。对于开发者而言,这几年的变化远不止 API 数量的增加,更重要的是开发思想、应用架构以及跨设备能力的不断演进。
如果说 HarmonyOS 3.x、4.x 时代,开发者更多关注的是分布式能力和 ArkUI 的逐步成熟,那么进入 HarmonyOS 6.1 后,一个更加明显的趋势开始出现——系统能力越来越多地服务于用户体验本身。例如悬浮页签、沉浸光感、实况窗等新能力,不再只是简单的组件更新,而是围绕「降低交互成本」「增强实时信息表达」「提升多设备体验一致性」进行的一次整体升级。
与此同时,HarmonyOS 7.0 也逐渐进入开发者视野。随着开发工具、系统能力以及应用框架持续演进,我们可以明显感受到鸿蒙正在从「支持多设备开发」逐步迈向「围绕场景构建统一体验」。
作为一名持续关注鸿蒙生态发展的开发者,我也经历了从 Java FA 模型,到 Stage 模型,再到 ArkTS 声明式开发的整个过程。一路走来,有过不少踩坑经历,也见证了鸿蒙开发效率不断提升的变化。
本文将结合 HarmonyOS 6.1 的实际开发体验,对多个创新能力进行分析,并结合 HarmonyOS 7.0 已公开的发展方向,分享个人对于未来鸿蒙应用开发的一些思考,希望能够给正在学习或者准备进入鸿蒙生态的开发者提供一些参考。
一、为什么我仍然坚持学习鸿蒙开发
说实话,刚开始接触鸿蒙的时候,我并没有意识到它和传统移动开发到底有什么本质区别。
那时候很多人讨论最多的话题还是:
鸿蒙是不是 Android?
对于刚入门的开发者来说,这类讨论其实意义并不大。真正影响开发体验的,是每天写下的每一行代码,是一次次编译运行后的效果,也是一个页面从设计稿真正变成可以交互的应用时带来的成就感。
第一次打开 DevEco Studio,我最大的感受就是「陌生」。
ArkTS 与传统 Java、Kotlin 的写法不同,ArkUI 声明式开发也和 XML 布局时代完全不是一个思路。刚开始的时候,我甚至会下意识地去寻找类似 Android Fragment、Activity 的开发方式,却发现鸿蒙已经采用了完全不同的 Stage 模型。
这种陌生感持续了很长一段时间。
例如:
- 为什么页面状态改变以后 UI 会自动刷新?
- 为什么不用 findViewById?
- 为什么组件几乎都是链式调用?
- 为什么生命周期和以前不一样?
这些问题困扰了我很久。
直到真正完成几个完整项目之后,我才逐渐理解官方为什么要推动声明式开发。
传统 UI 开发,本质上是在告诉系统:
我要如何修改页面。
而 ArkUI 更倾向于表达:
当前页面应该是什么样。
这种思想上的变化,看似只是写法不同,实际上意味着整个开发模式发生了改变。
页面开始围绕状态进行构建。
UI 成为了状态的映射。
开发者更多关注业务本身,而不是繁琐的界面刷新逻辑。
当真正适应这种开发方式以后,再回头看以前大量操作 View 的代码,反而会觉得复杂。
随着项目越来越多,我也开始注意到另外一个变化。
鸿蒙官方近年来越来越强调"体验一致性"。
以前我们更多讨论:
页面怎么写?
动画怎么做?
组件怎么封装?
而现在官方文档越来越多地提到:
- 用户体验连续性
- 跨设备体验一致性
- 实时信息展示
- 系统级交互能力
- AI 与系统能力融合
这些关键词说明,鸿蒙的发展重点已经不仅仅停留在应用开发层面,而是在逐步构建完整的操作系统生态。
对于开发者而言,这意味着未来竞争力不仅来自代码能力,更来自对系统能力的理解和运用。
我也曾经怀疑过:
现在学习鸿蒙还有没有意义?
后来参加一些开发者活动、阅读官方更新日志、体验新版本系统之后,我发现答案其实越来越明确。
一个平台是否值得投入,并不只是看它今天拥有多少应用,而要看它是否仍然保持快速演进。
从 ArkUI 的持续完善,到 ArkTS 能力不断增强,再到 HarmonyOS 6.1 一系列新特性的推出,可以看到鸿蒙仍然保持着较快的发展节奏。
对于开发者来说,这意味着:
每一次版本升级,都可能带来新的开发机会。
而真正能够抓住这些机会的人,往往不是等生态完全成熟以后才开始学习,而是在生态不断成长过程中持续积累经验。
我想,这也是我一直坚持学习鸿蒙开发的重要原因。
二、HarmonyOS 生态的发展变化:从分布式理念到场景化体验
很多开发者第一次接触鸿蒙时,都会将它与 Android、iOS 进行比较。
这种比较并没有错,因为对于绝大多数移动开发者来说,已有的开发经验就是理解新平台最直接的参照物。
但真正深入学习一段时间以后,我越来越觉得,HarmonyOS 与传统移动操作系统最大的不同,并不只是系统底层架构,而是它对于"设备"这一概念的重新定义。
在 Android 开发中,我们通常默认应用运行在一部手机上。
页面属于手机。
数据属于手机。
能力属于手机。
即使后来出现了平板、电视、手表等终端,开发模式依然更多是"针对不同设备开发不同版本"。
而 HarmonyOS 从设计之初提出的理念,就是希望打破这种设备之间天然存在的边界。
官方提出的"一次开发,多端部署"、"分布式能力"、"超级终端"等概念,本质上都是围绕这一目标展开。
刚开始接触这些概念时,我一度觉得它们距离实际开发还有些遥远。
直到后来真正开始尝试开发跨设备应用,才逐渐理解官方为什么一直强调"场景"而不是"设备"。
因为对于最终用户来说,他们关注的从来不是应用运行在哪一块屏幕上,而是希望自己的任务能够自然地延续。
例如:
早晨出门前,我可以在手机上查看待办事项;
进入汽车后,导航信息能够自然接续;
回到办公室后,同一份文档继续在平板上编辑;
晚上回家后,再通过智慧屏查看当天的数据统计。
整个过程中,用户完成的是同一件事情,而不是分别操作四个不同设备。
这正是 HarmonyOS 希望构建的体验。
2.1 从设备中心到场景中心
官方文档中多次提到"场景化体验"。
第一次看到这个词的时候,我理解得并不深。
后来在阅读更多开发资料,并结合自己做项目的过程后,我发现这个词实际上意味着开发思路发生了明显变化。
过去开发应用时,我们通常会先问自己:
这个页面放在哪里?
这个按钮应该怎么布局?
这个功能属于哪个 Activity?
而现在更多思考的问题变成:
用户完成这个任务需要经历哪些步骤?
哪些系统能力能够主动参与?
哪些信息应该持续展示?
哪些能力可以跨设备共享?
这种思维方式的改变,看似只是问题不同,实际上直接影响整个应用架构。
举一个很简单的例子。
以前开发一个运动记录应用,大多数逻辑都会集中在手机端完成。
开始运动。
记录数据。
结束运动。
生成报告。
整个过程始终围绕手机展开。
但在 HarmonyOS 场景下,情况开始发生变化。
手表负责实时采集心率。
耳机负责播放运动提醒。
手机负责地图与数据展示。
智慧屏负责运动总结。
每一个设备承担不同角色,但共同完成一次运动体验。
开发者关注的不再是哪一个设备,而是整个运动场景。
这种变化,也意味着系统能力越来越重要。
2.2 Stage 模型带来的开发模式变化
如果说 ArkTS 改变的是语言表达方式,那么 Stage 模型改变的就是整个应用架构。
很多刚从 Android 转过来的开发者都会有类似疑问:
为什么没有 Activity?
为什么页面生命周期变了?
为什么 Ability 和以前理解的不一样?
其实官方已经给出了非常明确的发展方向。
HarmonyOS 当前推荐开发者全面采用 Stage 模型。
相比早期的 FA(Feature Ability)模型,Stage 更强调应用整体生命周期管理。
刚开始迁移项目时,我最大的感受就是:
以前很多生命周期逻辑需要重新整理。
例如页面初始化。
资源释放。
Ability 之间通信。
窗口管理。
这些能力都进行了统一调整。
一开始确实有些不习惯。
尤其是以前很多代码依赖生命周期执行顺序。
迁移以后,需要重新思考整个业务流程。
但随着项目逐渐完成,我发现 Stage 最大的优势其实是结构更加清晰。
应用生命周期。
页面生命周期。
窗口生命周期。
它们各自职责更加明确。
很多以前容易混淆的问题,现在官方都进行了规范。
这对于大型项目而言尤其重要。
2.3 ArkTS:不仅仅是一门语言
很多刚开始学习鸿蒙的人都会把 ArkTS 理解成:
"TypeScript 加一点语法糖。"
实际上,这只是表面现象。
ArkTS 最大价值并不仅仅是语言本身,而是它与 ArkUI、状态管理、声明式开发之间形成了一套完整开发体系。
第一次真正理解状态驱动 UI,是在写一个简单计数器的时候。
以前 Android 时代:
修改数据。
找到 TextView。
调用 setText()。
刷新页面。
整个过程都需要开发者主动控制。
而 ArkUI 中更倾向于:
状态变化。
UI 自动更新。
页面只是状态的一种映射。
刚开始觉得这种方式有些"神奇"。
后来真正写复杂页面以后才发现,这种模式可以明显减少很多重复代码。
例如一个订单页面。
订单状态改变以后。
按钮颜色。
文字内容。
进度提示。
操作入口。
全部都会随着状态自动更新。
开发者几乎不用再关心哪个组件需要刷新。
这种开发体验,对于复杂业务来说提升非常明显。
当然,它也意味着开发者需要改变以前的思维方式。
不要再想着:
"我要修改哪个控件。"
而应该思考:
"当前状态是什么。"
UI 自然就会变化。
2.4 声明式开发真正改变了什么
很多介绍 ArkUI 的文章都会强调:
声明式开发。
响应式更新。
状态驱动。
这些概念大家都已经很熟悉。
但真正让我感受到变化的,并不是这些名词,而是维护成本。
以前一个页面几百行代码。
其中相当一部分其实都是:
初始化。
查找控件。
绑定事件。
修改属性。
控制显示隐藏。
业务逻辑反而没有多少。
后来项目越来越大。
维护成本越来越高。
经常修改一个按钮状态,就需要在多个地方同步调整。
而声明式开发最大的优势就在于:
页面描述的是最终结果。
而不是修改过程。
例如:
当用户登录成功。
头像显示。
昵称显示。
退出按钮显示。
未登录提示隐藏。
整个页面实际上只依赖一个登录状态。
开发者无需逐个修改组件。
代码可读性也明显提升。
这种变化,在团队协作时尤其明显。
新人阅读代码,不需要沿着几十个回调去寻找 UI 更新逻辑。
只要理解状态来源,就能够快速理解整个页面。
2.5 HarmonyOS 6.1 为什么更加重视系统能力
如果说前几个版本更多是在完善开发框架,那么 HarmonyOS 6.1 给我最大的感受,就是越来越强调"系统参与体验"。
例如官方新增的一些能力:
- 实况窗(Live View)
- 悬浮页签
- 沉浸光感
- 更多系统级交互体验优化
这些能力看似只是几个新特性。
实际上体现的是设计理念变化。
以前应用更多是:
打开。
使用。
退出。
整个生命周期几乎完全发生在应用内部。
而现在越来越多的信息,会直接出现在系统层。
用户甚至不用打开应用,就能够了解到当前状态。
例如:
外卖配送。
打车进度。
导航状态。
运动记录。
会议提醒。
物流更新。
这些实时信息如果仍然完全依赖应用页面展示,交互成本其实很高。
而系统级能力的加入,让信息展示更加自然。
开发者需要思考的不再只是"页面怎么设计",而是"哪些信息应该在系统层持续呈现,哪些交互适合放在应用内完成"。
这种能力也意味着,未来优秀的鸿蒙应用,不一定拥有最复杂的界面,而是能够更好地融入系统,为用户提供连续、一致、低打扰的体验。
2.6 从开发者角度看 HarmonyOS 7.0 的演进方向
随着 HarmonyOS 7.0 的推进,官方持续释放新的开发方向与能力演进信号。相比单纯增加 API 数量,我更关注的是几个长期趋势:
第一,是开发框架持续完善。ArkUI 与 ArkTS 的协同能力不断增强,声明式开发体验进一步成熟,开发者能够用更少的代码表达更复杂的界面逻辑。
第二,是跨设备体验进一步深化。开发目标不再局限于"适配更多设备",而是围绕用户任务实现自然流转,让应用真正融入多终端协同场景。
第三,是系统能力开放更加丰富。越来越多系统级能力通过统一接口向开发者开放,使应用能够与通知、窗口、卡片、元服务等能力形成更紧密的协同关系。
第四,是开发工具链持续优化。从 DevEco Studio 到调试工具、性能分析工具,再到工程管理能力,都在不断降低开发和维护成本。
我认为,对于开发者而言,HarmonyOS 的价值已经不仅仅体现在学习一套新的 API,而是在学习一种新的应用设计理念——以用户场景为中心,以状态驱动界面,以系统能力构建连续体验。
三、HarmonyOS 6.1 创新特性适配实战:从“功能可用”到“体验优秀”
第一次看到 HarmonyOS 6.1 的更新说明时,我并没有急着去看新增了多少 API,而是先体验了一段时间系统。
因为我一直认为,一个操作系统版本真正有价值的地方,并不是增加了多少接口,而是这些能力是否真的能够改善用户体验。
开发者其实很容易陷入一种误区:认为版本更新就是学习几个新组件、调用几个新接口,项目就完成了适配。
但真正做过线上项目以后就会发现,用户几乎不会关心你的应用使用了哪个 API,他们只会感受到这个应用是不是更顺手、更自然、更符合自己的使用习惯。
HarmonyOS 6.1 给我的一个明显感受,就是系统开始更多地参与到应用体验之中。
以前,应用几乎是一个相对独立的空间。
用户打开应用、完成操作、退出应用。
而现在,越来越多的信息开始在系统层持续存在,越来越多的交互开始发生在应用之外。
这意味着开发者的思维也需要发生变化。
过去我们关注的是:
页面应该如何设计?
现在更多需要思考:
哪些能力应该交给系统完成?哪些信息需要持续陪伴用户?
这种理念上的变化,也是我认为 HarmonyOS 6.1 最值得学习的地方。
3.1 为什么说 HarmonyOS 6.1 更强调“体验设计”
刚开始学习鸿蒙的时候,我更关注的是:
页面怎么写?
动画怎么做?
状态怎么管理?
直到真正参与一个持续迭代的项目以后,我才发现,一个应用是否优秀,很多时候并不是因为页面炫酷,而是因为它能够减少用户操作。
举一个很简单的例子。
以前查看快递物流,大概需要这样几个步骤:
打开手机。
找到快递 App。
进入订单页面。
点击物流详情。
等待页面加载。
查看当前状态。
整个流程下来,需要用户主动完成多个操作。
但实际上,大多数时候用户真正关心的只有一句话:
快递现在到哪里了?
如果系统能够直接把这一信息展示出来,那么很多重复操作其实完全可以省略。
HarmonyOS 6.1 新增的一些系统能力,本质上就是围绕这种思路展开。
开发者需要做的,不再只是设计一个漂亮的页面,而是思考:
什么时候应该打开应用?
什么时候其实不用打开应用?
哪些信息应该一直存在?
哪些信息应该及时消失?
这是 HarmonyOS 官方近年来一直强调的"场景体验"。
3.2 实况窗(Live View)带来的体验变化
在 HarmonyOS 6.1 的更新内容中,我最关注的就是实况窗。
第一次看到官方演示时,我想到的并不是它有多炫,而是:
终于有一种能力,可以让应用的信息持续存在,而不是停留在应用页面里。
很多应用其实都有实时状态。
例如:
- 外卖配送
- 打车订单
- 地图导航
- 倒计时
- 健身记录
- 航班动态
- 快递运输
- 比赛比分
这些信息最大的特点就是:
持续变化。
如果仍然依赖用户不断打开应用刷新,其实体验并不好。
因此,HarmonyOS 将这些实时变化的信息,通过系统能力统一呈现。
对于开发者而言,这意味着:
应用不仅仅是一个页面集合,而是系统体验的一部分。
哪些业务适合接入实况窗?
根据官方推荐场景,以及我自己的理解,大概可以分成几类。
第一类,是实时进度型。
例如:
- 快递运输
- 外卖配送
- 打车接驾
- 文件下载
特点都是:
状态不断变化。
用户频繁关注。
第二类,是持续计时型。
例如:
运动。
会议。
直播。
录音。
倒计时。
这些业务都具有明显时间属性。
第三类,是导航类。
包括:
驾车导航。
骑行导航。
步行导航。
用户需要持续获取当前位置。
第四类,是赛事或活动。
例如:
体育比赛。
演唱会。
会议签到。
课程提醒。
这些信息更新频率高,同时用户希望第一时间看到。
因此,并不是所有应用都适合接入实况窗。
如果只是普通资讯阅读,其实没有必要为了适配而适配。
3.3 接入新能力之前,我踩过哪些坑?
第一次准备尝试这些新能力时,我最大的误区就是:
把它当成普通页面开发。
后来发现完全不是这样。
例如:
以前开发订单详情。
所有信息都放在页面里面。
进入页面以后:
查询接口。
刷新列表。
更新状态。
退出页面。
整个生命周期结束。
但是系统级能力意味着:
即使应用已经退到后台。
甚至页面已经销毁。
系统仍然需要知道:
订单是不是更新了?
配送是不是继续?
导航是不是结束?
因此后台状态同步就显得更加重要。
以前很多项目:
状态保存在页面。
页面销毁。
状态一起消失。
后来重新设计以后。
更多状态开始交给统一的数据层管理。
页面只是展示。
系统能力也是展示。
这样整个架构就清晰很多。
3.4 悬浮页签适配实践
如果让我评价 HarmonyOS 6.1 哪一个能力最容易提升用户体验。
我会选择:
悬浮页签。
原因其实很简单。
很多应用页面越来越复杂。
例如:
新闻。
商城。
社区。
视频。
音乐。
一个页面里面经常有:
推荐。
关注。
热门。
最新。
附近。
多个 Tab。
以前用户切换这些内容时,经常需要:
重新滑动。
重新定位。
重新寻找。
而 HarmonyOS 新的交互方式,让页面切换更加自然。
刚开始我认为:
这只是 UI 优化。
后来真正自己做页面以后发现:
其实背后最大的挑战,是状态同步。
例如:
用户停留在哪一个 Tab?
滚动位置是多少?
返回以后是否恢复?
不同 Tab 是否缓存?
这些都直接影响体验。
以前项目里,我曾经因为没有保存滚动状态。
导致用户每次返回页面。
都重新回到顶部。
后来自己体验以后才发现:
这种小问题,比页面不好看更容易影响使用感受。
因此后来所有列表页面。
我都会优先考虑:
状态恢复。
数据缓存。
页面连续性。
这也是 HarmonyOS 官方一直强调:
减少用户操作成本。
3.5 沉浸光感:细节体验的重要性
第一次看到官方介绍沉浸光感时,我其实有一点疑惑。
"颜色变化真的有那么重要吗?"
后来真正体验系统以后,我发现:
很多体验,其实并不会让用户主动说出来。
但是一旦没有,就会觉得哪里不舒服。
例如:
播放器。
相册。
视频。
阅读。
这些应用都有明显主题色。
如果整个系统仍然保持固定背景。
界面就会显得比较割裂。
而 HarmonyOS 希望做到:
应用内容。
页面背景。
系统元素。
共同形成一致视觉体验。
虽然开发过程中,我们更多还是按照官方规范适配。
但是从最终效果来看。
整体沉浸感确实提升不少。
3.6 从 6.0 升级到 6.1,我总结出的几点经验
经过几个项目升级之后,我逐渐形成了一套自己的升级流程。
第一,不要一开始就改业务代码。
先升级 SDK。
确认工程能够正常编译。
第二。
阅读官方 Release Note。
不要直接开始修改。
先了解:
新增哪些能力。
废弃哪些接口。
哪些行为发生变化。
第三。
优先适配官方推荐能力。
例如:
新的系统体验。
新的交互规范。
新的设计要求。
第四。
完成适配以后。
一定要重新测试:
页面生命周期。
后台恢复。
深浅色模式。
横竖屏。
字体缩放。
分屏模式。
很多问题。
其实都不是代码错误。
而是新的系统行为导致。
第五。
最后再进行性能分析。
观察:
页面启动时间。
内存占用。
动画流畅度。
资源释放。
这些往往比新增几个功能更加重要。
本章小结
HarmonyOS 6.1 带给开发者的价值,并不仅仅在于增加了新的系统能力,更重要的是推动开发者重新思考应用与系统之间的关系。
过去,我们习惯将应用看作一个相对独立的空间,所有交互都围绕页面展开;而在 HarmonyOS 的设计理念中,应用开始逐渐融入整个操作系统生态,与系统能力共同构建完整的用户体验。
实况窗让实时信息能够持续陪伴用户,而不是局限于应用内部;悬浮页签优化了复杂内容场景下的导航效率,使页面切换更加自然;沉浸光感则通过系统级视觉协同,进一步提升了界面的整体一致性。这些能力看似各自独立,但背后体现的是同一种设计思想——以用户任务为中心,而不是以页面为中心。
对于开发者而言,真正需要适配的不只是新增接口,更是开发思维。从功能实现到体验设计,从页面开发到场景构建,这种转变也是 HarmonyOS 持续演进过程中最值得关注的方向。
四、基于 HarmonyOS 6.1 构建智慧待办应用实战——从工程搭建到完整开发
前面几章更多讨论的是 HarmonyOS 的开发理念以及 HarmonyOS 6.1 的新能力。但如果这些理念最终不能落地到真实项目,那么学习它们的意义就会大打折扣。
因此,从这一章开始,我不再单独介绍某一个 API,而是结合一个完整项目,把前面提到的开发思想串联起来。
项目名称我暂时命名为 SmartTodo(智慧待办)。
之所以选择待办类应用,并不是因为它足够简单,而是因为它几乎能够覆盖鸿蒙应用开发中的大多数基础能力:
- ArkUI 声明式页面开发;
- Stage 模型应用架构;
- Navigation 路由导航;
- @State、@Prop、@Link 等状态管理;
- Preferences 数据持久化;
- 生命周期管理;
- 深色模式适配;
- 响应式布局;
- HarmonyOS 6.1 新交互体验适配。
虽然只是一个看似普通的待办应用,但如果按照企业项目的思路进行设计,它已经足以覆盖一个中小型鸿蒙应用的大部分开发流程。
4.1 项目需求分析
真正开始编码之前,我习惯先把需求写下来,而不是直接创建页面。
很多开发者刚开始学习的时候,喜欢边写边想。
页面写一点。
功能补一点。
最后发现整个工程越来越乱。
后来做项目越来越多,我逐渐养成了一个习惯:
先画流程。
再设计数据。
最后再开始写代码。
SmartTodo 的核心需求如下:
用户功能
- 新建待办事项;
- 编辑待办事项;
- 删除待办事项;
- 完成待办事项;
- 查看今日任务;
- 查看全部任务;
- 根据优先级排序;
- 根据完成状态筛选。
系统功能
- 自动保存数据;
- 页面状态恢复;
- 深色模式支持;
- 横竖屏适配;
- 大字体适配;
- 页面动画;
- 长按菜单;
- 下拉刷新。
这些需求看起来并不复杂,但已经覆盖了 HarmonyOS 官方推荐的大部分开发能力。
4.2 工程目录设计
刚开始学习的时候,我所有页面都会放在 pages 目录。
后来项目越来越大。
几十个页面以后。
根本找不到代码。
于是我开始按照官方推荐思路重新整理目录。
entry
│
├── ets
│
├── pages
│ HomePage
│ DetailPage
│ EditPage
│
├── model
│ TodoModel
│
├── viewmodel
│ TodoViewModel
│
├── service
│ PreferenceService
│
├── common
│ Constants
│
├── utils
│
├── component
│ TodoCard
│ EmptyView
│ FilterDialog
│
└── resources
为什么这样划分?
因为页面负责展示。
组件负责复用。
数据模型负责描述对象。
业务逻辑放到 ViewModel。
数据存储交给 Service。
这样即使项目继续扩大。
整个目录依然保持清晰。
这一点,也是后来我阅读不少官方示例之后最大的收获。
不要让页面承担所有事情。
4.3 数据模型设计
很多初学者喜欢直接定义几个变量:
title
content
time
虽然能运行。
但是后期维护会越来越困难。
因此我更喜欢先定义数据对象。
例如:
export class TodoItem {
id:number
title:string
content:string
createTime:number
finish:boolean
priority:number
}
这样以后:
新增字段。
接口返回。
本地存储。
都保持统一。
数据模型一旦稳定。
整个项目都会轻松很多。
4.4 页面状态管理
如果让我评价 ArkUI 最大的优势。
我一定会选择:
状态驱动。
第一次真正理解这一点。
是在开发列表页面的时候。
以前 Android 开发。
新增一个待办。
通常需要:
查询数据库。
刷新 Adapter。
notifyDataSetChanged()
重新计算数量。
重新刷新标题。
整个过程需要开发者自己控制。
而 ArkUI 完全不同。
例如:
@State
todoList:TodoItem[]=[]
新增数据以后。
页面自动刷新。
列表自动更新。
统计数字自动变化。
组件状态同步更新。
开发者几乎不用关心刷新逻辑。
这种开发体验。
第一次使用的时候确实会觉得非常舒服。
@State 为什么适合页面状态
很多刚接触 ArkTS 的开发者容易混淆:
什么时候使用 @State?
什么时候使用 @Prop?
什么时候使用 @Link?
我自己踩过不少坑。
后来总结出来一句话:
页面自己拥有的数据。
就是 State。
例如:
当前列表。
当前输入内容。
当前按钮状态。
当前加载状态。
这些都属于页面自身维护的数据。
因此使用:
@State
即可。
不要什么变量都放到全局。
否则后面会越来越难维护。
4.5 页面拆分的重要性
很多人的第一个项目都会写成这样:
HomePage
1500 行代码
包括:
顶部导航。
列表。
弹窗。
按钮。
菜单。
事件。
全部写一起。
刚开始感觉方便。
后来任何一个地方修改。
都会影响整个页面。
因此后来我的原则就是:
一个组件。
负责一件事情。
例如:
TodoCard
负责展示任务。
@Component
struct TodoCard{
}
FilterDialog
负责筛选。
@Component
struct FilterDialog{
}
EmptyView
负责空页面。
@Component
struct EmptyView{
}
最后。
HomePage 只负责:
组织组件。
管理状态。
页面一下就清晰很多。
4.6 Navigation 路由管理
HarmonyOS 新版开发推荐使用 Navigation。
相比以前字符串路由。
Navigation 最大优势就是:
页面组织更加清晰。
例如:
首页。
详情页。
编辑页。
可以形成完整导航关系。
以前我喜欢:
点击按钮。
直接跳页面。
后来项目复杂以后。
越来越容易出现:
返回异常。
页面重复。
生命周期混乱。
而 Navigation 将整个页面栈统一管理。
阅读官方文档以后。
我开始慢慢把项目全部迁移。
迁移完成最大的感受就是:
调试轻松很多。
尤其大型项目。
页面关系一目了然。
4.7 数据持久化
待办应用最大的特点就是:
退出以后。
数据不能丢。
很多开发者第一反应就是:
数据库。
其实对于这种轻量数据。
HarmonyOS 官方提供的 Preferences 已经足够。
例如:
保存任务。
保存主题。
保存配置。
保存排序方式。
读取速度快。
接口简单。
维护成本低。
真正复杂的数据。
再考虑关系数据库。
不要为了"高大上"。
什么项目都直接上数据库。
4.8 页面生命周期
HarmonyOS Stage 模型以后。
生命周期也发生了变化。
刚迁移的时候。
我最大的错误就是:
把所有初始化都写在页面创建里面。
后来发现。
有些数据。
页面回来以后。
已经变化了。
于是又开始手动刷新。
代码越来越乱。
后来阅读官方文档以后。
重新整理:
页面创建。
负责初始化。
页面显示。
负责刷新。
页面隐藏。
暂停任务。
页面销毁。
释放资源。
职责一下清晰很多。
4.9 页面性能优化
真正影响用户体验的。
很多时候不是功能。
而是流畅度。
我以前做列表。
喜欢:
进入页面。
一次加载全部。
后来数据越来越多。
明显开始卡顿。
后来调整以后:
分页。
懒加载。
按需刷新。
页面明显流畅很多。
另外。
图片。
动画。
定时器。
网络请求。
都尽量做到:
不用的时候立即释放。
这些优化。
平时感觉不到。
但是上线以后。
用户最容易感受到。
本章小结
通过 SmartTodo 项目的搭建,我最大的体会是:HarmonyOS 应用开发已经不再只是页面和接口的简单组合,而是一套围绕声明式开发、状态管理和工程化设计展开的完整开发体系。
从工程目录划分到数据模型设计,从状态驱动到组件拆分,再到 Navigation 路由管理和数据持久化,每一个环节都体现出官方推荐的开发理念——降低页面耦合、提升代码可维护性、增强应用的长期演进能力。
对于个人开发者来说,这种开发方式可能需要一定的适应过程;但当项目规模逐渐扩大后,它带来的收益会越来越明显。代码更容易阅读,模块更容易复用,后续迭代和多人协作的成本也会显著降低。
更多推荐



所有评论(0)