鸿蒙应用的内存问题往往不像崩溃那样容易暴露。一个页面多打开几次、列表多滑动几轮,内存曲线悄悄往上走,直到系统触发 LMK(Low Memory Killer)把进程杀掉,用户看到的只是"闪退"。图片密集型场景尤其容易踩坑,因为一张 PixelMap 在内存里占的空间远大于它在磁盘上的文件体积。
列表是移动端最常见的 UI 形态,也是性能问题的高发区。数据量一旦上千,滑动卡顿、内存飙升、白屏闪烁就会接踵而至。HarmonyOS 提供了 LazyForEach 懒加载和 @Reusable 组件复用两套机制来应对这些问题,但要把它们用对,需要理解框架在背后做了什么。
鸿蒙的 ArkTS 运行时采用单线程事件循环模型,UI 渲染、事件处理、业务逻辑都在主线程上执行。一旦出现 CPU 密集计算或大块 I/O 操作,主线程被阻塞,帧率下降就不可避免。系统提供了两种多线程并发方案:TaskPool 和 Worker,它们都基于 Actor 并发模型,线程之间内存隔离,通过消息传递通信,避免了传统锁机制带来的死...
帧率直接决定了用户对应用的第一印象。列表滑动是否流畅、页面转场是否顺滑、按钮反馈是否即时,背后都是帧率在起作用。HarmonyOS 默认的屏幕刷新率为 60Hz,意味着每帧的时间预算只有 16.6ms。一旦某帧的处理时间超出这个预算,用户就会感知到卡顿。
鸿蒙应用的冷启动速度直接决定了用户的第一印象。从用户点击桌面图标到看见首页内容,中间经历了进程创建、框架初始化、Ability 生命周期回调、页面布局与渲染等多个阶段。每个阶段都有可能引入不必要的耗时,而开发者能够介入优化的环节主要集中在 Application 初始化、Ability 创建和首页渲染三个阶段。
做混合开发的朋友都知道,有时候我们根本不需要从服务器拉一个完整的 HTML 页面——比如展示后台下发的富文本公告、渲染本地拼接的报表,或者离线包解压后直接塞给 WebView。这种时候,WebviewController.loadData() 就是你最好的朋友。
做移动端久了你会发现,跨平台从来不是一个"能不能做"的问题,而是"哪种代价你能承受"。HarmonyOS NEXT 全面到来之后,不少团队开始焦虑——已有的 RN/Flutter 资产能不能搬过来?原生 ArkTS 写的界面能不能反向跑到 iOS 和 Android 上?
Builder 模式在 GoF 分类里属于创建型模式,核心思路是把一个复杂对象的构造过程拆成若干步骤,允许调用方按需选择和组合。在 HarmonyOS 三方库生态中,这个模式常见两种变体:一种是以 HMRouter 为代表的链式 API,方法逐个追加配置并返回 this,最后以一个终结方法触发动作;另一种是以 ImageKnife 为代表的配置对象模...
工厂模式在 GoF 分类中属于创建型模式,核心目标是将对象的创建逻辑从使用方剥离。在 HarmonyOS 开源项目中,ImageKnife、HMRouter、ImageKnifePro 三个仓库分别采用了不同变体的工厂模式来解决各自的创建问题。这篇文章以这三个仓库的实际源码为素材,逐一拆解四种工厂实现,并在最后讨论工厂模式的适用边界。
观察者模式的核心思路是"发布-订阅":一方发出事件,若干订阅者响应。在 HarmonyOS 生态的三方库中,这一模式的落地方式差异明显。HMRouter 自己实现了一个轻量 EventBus,ImageKnife 选择了系统提供的 @ohos.events.emitter,而 ArkTS 框架层面则给出了 @Watch 装饰器,直接在属性变更时触发回调。
做过音视频类应用(比如音乐播放器、播客 App 或者带背景音的游戏)的朋友,大概率都遇到过这种让人抓狂的场景:用户退到后台,音乐还在响,但通知栏的播控按钮却失灵了;或者按了暂停,声音停了,但系统控制中心的进度条还在走。
做过移动端开发的朋友都有体会,应用里的登录和敏感操作验证,向来是个让人头疼的平衡术。一方面,你得设下重重关卡,防止恶意攻击和数据泄露;另一方面,繁杂的密码输入和验证流程,又在无声地劝退用户。难道就没有一种两全其美的办法吗?
阅读 HMRouter、ImageKnife、ImageKnifePro 三个鸿蒙开源库的源码时,我发现单例模式出现的频率远超预期。粗略统计,三个仓库中至少有 6 处显著不同的单例实现,从最基本的懒汉式,到 C++ 静态局部变量,再到构建工具生命周期驱动的自毁式单例,覆盖了 ArkTS、C++、hvigor 三个技术层。
责任链模式在客户端框架中出镜率很高,但不同框架的实现差异远比"链表依次调用"这个概括要大。OkHttp 用递归 + 索引推进来实现同步洋葱模型,HMRouter 在同步三值返回之上叠加了异步洋葱接口,ImageKnifePro 则用 C++ 虚函数 + 链表指针做了一套 bool 短路链。三者分别面对 HTTP 管线、路由导航、图片加载这三种场景,在...
这是跨项目设计模式系列的第二篇,聚焦策略模式(Strategy Pattern)。策略模式的核心思路是把一组可互换的算法封装在独立的类里,让调用方通过统一接口选择具体实现,而不必在业务代码中写大量 if-else 或 switch-case。
做鸿蒙原生开发的朋友,一定对“万物互联”这四个字不陌生。想象一个典型的场景:你正在手机上填一张复杂的表单,突然旁边一台超大屏幕的折叠屏设备亮起,你轻轻一划,表单连同输入焦点无缝“飞”到了大屏上——这就是分布式跨设备启动 UIAbility 的魅力。
当你的项目里充斥着三个以上的业务模块,或者你同时在维护两个极其相似的 APP 时,你会发现,把通用的工具类、精美的 UI 组件甚至高性能的 C++ 算法隔离开来,变成一个个独立的标准件,是多么的重要。
做鸿蒙开发的朋友,大概率都经历过这样的至暗时刻:接手一个祖传页面,里面几百行 UI 代码揉成一团,魔法数字(Magic Numbers)满天飞,同一个网络请求逻辑在三个地方复制粘贴……改一个样式,生怕牵一发而动全身引发雪崩。
HarmonyOS 6.1 已于 2026 年 4 月 20 日正式发布,但在 HarmonyOS 6.0 和 HarmonyOS 6.1 两个版本之间,还有 HarmonyOS 6.0.1 和 HarmonyOS 6.0.2 两个小版本。下面结合《鸿蒙HarmonyOS 6应用开发:从零基础到App上线》一书对 HarmonyOS 6.0.1 新特性中的常用部分逐一讲解。
DevEco Studio 里点 Run 就能构建安装,但 CI 服务器没有 GUI——构建、测试、打包、签名全靠命令行。hvigorw 是 Hvigor 构建系统的命令行入口,所有在 IDE 里能做的构建操作都有对应的命令行参数。