写点什么

从“探索”到“布道”,一个「鸿蒙领航者」的炼成记

  • 2025-11-06
    北京
  • 本文字数:4118 字

    阅读完需:约 14 分钟

大小:1.22M时长:07:07
从“探索”到“布道”,一个「鸿蒙领航者」的炼成记

2019 年 8 月,即将踏入大学校园的李浩佳第一次在新闻中看到了“HarmonyOS”的名字。那时的他,还只是一个对软件工程充满好奇的新生,未曾想到这会成为他职业生涯的重要注脚。


六年过去,鸿蒙已从一个陌生的名词,变成了他日常开发的核心技术栈。他也从一名普通开发者成长为社区的技术分享者,持续为鸿蒙生态贡献力量。


李浩佳正在敲代码


李浩佳带着骄傲对 InfoQ 说,由于在国内外平台积极分享,他已经两次获得“HarmonyOS 学习资源创作先锋”的荣誉称号。

从好奇到职业选择


大学期间,鸿蒙的多设备分布式架构深深吸引了李浩佳。为了追赶技术潮流,他加入了多个开发者交流群,并在其中结识了一位志同道合的产品经理。两人一拍即合,共同参加 HarmonyOS 极客马拉松比赛,开发了他们的第一个鸿蒙应用——一款名为“滴答时钟”的小工具。这次经历不仅让他对鸿蒙的技术潜力有了更深的认知,也为他未来的职业道路埋下了伏笔。


李浩佳最初接触的技术栈是 python,他表示,在迁移到鸿蒙技术栈的过程中从语法上没有过多阻碍,但是从整体项目工程结构再到具体的单个 module 包的理解上还是需要更多经验积累。


2023 年 8 月,李浩佳毕业时,鸿蒙生态的开发者数量已突破 220 万,API 日调用次数高达 590 亿次。这一数据背后,是鸿蒙技术的快速发展和广泛应用。而李浩佳所在的公司,也遇到越来越多的鸿蒙开发需求,他因此正式踏上了鸿蒙开发的职业道路。


“早期实践中,鸿蒙的‘一次开发,多端部署’能力让我确信了他在物联网领域的巨大潜力。”李浩佳说,“同时,ArkUI 与 ArkTS 在开发效率上展现出卓越优势,尤其在多 UI 适配工作中,为我们大幅节省了时间与代码量。在处理平板、折叠屏的 UI 适配过程中,ArkUI 能快速完成适配工作。”

攻坚首批 HarmonyOS NEXT 应用


网鱼 APP 是李浩佳参与开发的第一个 HarmonyOS NEXT 应用。作为网鱼网咖的官方配套服务,它承担着远程座位预订、酒店预订、在线充值等核心功能。


这个项目成为了李浩佳职业开发之路上的重要试炼场。


“网鱼 APP 算是第一批接入鸿蒙的应用, 整个 APP 都以 HarmonyOS NEXT 作为技术支持。”李浩佳表示。


作为先行者,团队在开发过程中遇到了诸多技术难题。“接入高德地图时,由于缺乏相关技术博客和参考资料,我们只能在高德的官方 API 文档中一点点的寻找和学习,”李浩佳回忆道,“除此之外,当时的高德地图星河版也是首版,在使用过程中,我们也发现了一些问题,需要不断与高德技术团队沟通解决。”这些沟通磨合最终促进了两款应用的共同完善。


在项目开发中,他们还曾在性能和数据驱动更新方面遇到技术困难。


在酒店详情页的实现过程中,由于涉及大量并发数据请求与复杂视图渲染,主线程出现明显阻塞,严重影响用户体验。为优化这一问题,李浩佳团队引入了懒加载机制,有效延后非关键资源的加载时机,从而显著提升了页面响应流畅度。


此外,在地图模块的开发中,由于初始数据结构层级过深、嵌套复杂,导致状态变化无法准确触发 UI 同步更新。针对这一痛点,李浩佳团队通过重构数据模型、简化层级关系,成功建立起稳定可靠的数据-UI 联动机制,确保了视图与状态的一致性。


李浩佳表示,高德与携程等应用在鸿蒙生态的先行上架,为他们的技术路径与用户体验设计提供了重要的参考与信心。


经过不断攻坚,网鱼 APP 首版上线,成功打通了该平台下的核心业务闭环,实现了鸿蒙侧用户的网咖预订功能。作为网鱼最主要的业务线,此功能的落地标志着网鱼 APP 鸿蒙版本具备了完整的服务能力。



沉浸式的一个工具
/* * @des 沉浸式屏幕 * @author lhj * @data 2025/03/27 * */class ScreenManager { private static instance: ScreenManager; // 单例, 静态模式,全局就一个。 private topSafeHeight: number = 0; private bottomSafeHeight: number = 0; private constructor() { }
public static getInstance(): ScreenManager { if (!ScreenManager.instance) { ScreenManager.instance = new ScreenManager(); } return ScreenManager.instance; }
getTopSafeHeight() { return this.topSafeHeight; }
getBottomSafeHeight() { return this.bottomSafeHeight; }
/* * @des 开启沉浸式 * */ setFullScreen(windowStage: window.WindowStage) { let windowClass: window.Window = windowStage.getMainWindowSync() let isLayoutFullScreen = true try { windowClass.setWindowLayoutFullScreen(isLayoutFullScreen) let bottomType = window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR let bottomAvoidArea = windowClass.getWindowAvoidArea(bottomType) let bottomRectHeight = bottomAvoidArea.bottomRect.height //底部导航栏高度
let topType = window.AvoidAreaType.TYPE_SYSTEM let topAvoidArea = windowClass.getWindowAvoidArea(topType) let topAvoidHeight = topAvoidArea.topRect.height //顶部状态栏高度
this.setTopSafeHeight(px2vp(topAvoidHeight)) this.setBottomSafeHeight(px2vp(bottomRectHeight)) } catch (e) { console.log("fullScreenError", e) } }
/* * @des 注册监听函数 * */ registerWindowListener(windowStage: window.WindowStage) { let windowClass: window.Window = windowStage.getMainWindowSync() // 3. 注册监听函数,动态获取避让区域数据 windowClass.on('avoidAreaChange', (data) => { if (data.type === window.AvoidAreaType.TYPE_SYSTEM) { let topRectHeight = data.area.topRect.height; console.log('avoidAreaChangeee: ' + topRectHeight) this.setTopSafeHeight(px2vp(topRectHeight)) } else if (data.type == window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR) { let bottomRectHeight = data.area.bottomRect.height; this.setBottomSafeHeight(px2vp(bottomRectHeight)) } }); } /* * @des 控制状态栏的显隐 ,false:隐藏。true 显示 * */ setStatusBarVisibility(windowStage: window.WindowStage,topShow: boolean, bottomShow: boolean) { let windowClass: window.Window = windowStage.getMainWindowSync() windowClass.setSpecificSystemBarEnabled('status', topShow).then(() => { console.info('Succeeded in setting the status bar to be invisible.'); }).catch((err: BusinessError) => { console.error(`Failed to set the status bar to be invisible. Code is ${err.code}, message is ${err.message}`); }); // 2. 设置导航条隐藏 windowClass.setSpecificSystemBarEnabled('navigationIndicator', bottomShow).then(() => { console.info('Succeeded in setting the navigation indicator to be invisible.'); }).catch((err: BusinessError) => { console.error(`Failed to set the navigation indicator to be invisible. Code is ${err.code}, message is ${err.message}`); }); }
private setTopSafeHeight(topSafeHeight: number) { this.topSafeHeight = topSafeHeight; }
private setBottomSafeHeight(bottomSafeHeight: number) { this.bottomSafeHeight = bottomSafeHeight; }}
export const screenManager = ScreenManager.getInstance()
复制代码

李浩佳为鸿蒙 APP 设计的沉浸式工具

成为布道者


作为鸿蒙生态的积极参与者,李浩佳所在公司也建立了每周一次的学习小组。他也将内部交流和个人心得转化为系统化的学习资源,并在国内外平台积极分享。


“当时正值鸿蒙开发的初期阶段,很多开发者都在摸索中前行。”李浩佳回忆道,“为了帮助大家更快上手,我们每周都会组织讨论会,大家的参与热情非常高。”


其中,路由框架的升级迭代给他留下深刻印象:在项目收尾阶段,团队面临从传统 router 方案向官方推荐的 Navigation 框架迁移的挑战。


"Navigation 虽然功能强大,但实现复杂度提升,直接使用会影响 UI 渲染和生命周期。"为了减少修改的代码量,李浩佳团队对 Navgation 进行了二次封装,只需要由外部传入一个 Builder 就可以完成当前页面的路由替换,降低了在修改路由框架时造成代码丢失的风险。


对技术的热情,让鸿蒙开发者社区多了一位叫“北花南树”的布道者。


让他没想到的是,这些基于实战经验的总结让他在鸿蒙开发者社区中两次获得“HarmonyOS 学习资源创作先锋”称号。


李浩佳表示,鸿蒙“一次开发,多端部署”的特点让他持续投入。他表示,这为创新提供了无限可能,借由这一功能,他可以构思以前在单设备上无法实现的功能——手机游戏可以无缝流转到智慧屏上,让用户得以利用大屏和更好的音响;导航应用可以在手机、手表和车机间无缝切换,让用户体验更加流畅。


对于鸿蒙开发者,李浩佳也给了几点实用建议:

  1. 学习路径

建议新手从 DevEco Studio 工具入手,系统学习 ArkUI/ArkTS 语法,深入理解鸿蒙架构体系。官方视频教程结合 API 文档是最佳学习资源。

  1. 开发实践

注意区分元服务和 APP 开发两种应用中 API 的区别,也要考虑到后续不同设备适配的问题。建议与产品、UI 团队充分沟通,提前提出解决方案,或参考官方示例解决问题。最重要的一点是及时了解鸿蒙的新特性。

  1. 性能优化

避免状态变量滥用,深入理解状态管理机制,使用性能优化组件。开发前需制定完善的技术方案,开发过程中进行代码评审,发现不合格代码即时找到相关开发人进行纠正。


对于生态发展,李浩佳充满期待:“当前三方库的建设仍然是一片蓝海,期待更多开发者加入,共同完善基础设施,这将显著提升开发效率,也有利于独立开发者创新。”


“我深信鸿蒙系统的未来充满潜力,并由衷期盼它能持续成长。在为鸿蒙生态贡献力量的过程中,这本身也是一段让我个人不断进步、收获反哺的旅程。”李浩佳说。


从最初的兴趣萌发,到如今的深度参与、积极布道,李浩佳既是鸿蒙技术的受益者,也是推动生态繁荣的贡献者。在鸿蒙的舞台上,他用自己的代码、分享与坚持,诠释了技术与社区的力量。正是无数像他这样的开发者,让鸿蒙的未来充满无限可能。

2025-11-06 15:086801

评论

发布
暂无评论

“自我实现的预言”摩尔定律,如何继续引领创新

E科讯

使用 Makefile 管理和部署 Go 项目

左诗右码

Go

华为大咖说 企业应用AI大模型的“道、法、术” -- 法:落地篇 (上)

人工智能 企业 华为云

职场<火焰杯>测试开发大赛决赛即将开始!

测试人

软件测试

生产管理MES系统在灯具照明行业怎么数字化转型

万界星空科技

mes 万界星空科技 灯具行业 灯具 照明

“英特尔x希沃:40分钟高效课堂“诞生记”

E科讯

市场表现低迷,本周期的山寨币还有投资机会吗?

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

万字详解!在 Go 语言中操作 ElasticSearch

左诗右码

Elasticsearch SQL

从超越数字到卓越叙事,感受数据可视化的力量

智达方通

企业管理 全面预算管理 财务管理 财务规划

职场<火焰杯>测试开发大赛决赛即将开始!

测吧(北京)科技有限公司

测试

一文搞懂到底什么是 AQS

不在线第一只蜗牛

Java JVM

【邀请函】相约CommunityOverCode Asia 2024,共探Flink、Paimon、Celeborn开源新境界!

Apache Flink

大数据 flink Celeborn paimon

Renderless 思想正在影响前端开发

OpenTiny社区

开源 组件库 OpenTiny TinyVue

结合RNN与Transformer双重优点,深度解析大语言模型RWKV

华为云开发者联盟

深度学习 华为云 transformers 华为云开发者联盟 企业号2024年7月PK榜

Python 使用 FastAPI 和 PostgreSQL 构建简单 API

我再BUG界嘎嘎乱杀

Python postgresql 开发语言 FastApi

【论文速读】|FuzzAug:探索模糊测试作为神经网络测试生成的数据增强

云起无垠

用flutter实现五种寻路算法的可视化效果,快来看看!

编程的平行世界

flutter 算法

EMQX 与 MQTT: AI 大模型时代的分布式数据中枢

EMQ映云科技

mqtt mqtt broker

Rust编程语言到底是不是炒作的噱头?

伤感汤姆布利柏

MES系统生产计划的实施流程

万界星空科技

生产管理系统 mes 万界星空科技 生产计划

从“探索”到“布道”,一个「鸿蒙领航者」的炼成记_HarmonyOS_付秋伟_InfoQ精选文章