前言
平时写正式复盘、踩坑笔记比较多,今天换个风格,记录一些鸿蒙开发里细碎、真实的日常感受。很多问题算不上重大 bug,却会反复消耗开发时间;很多感悟是反复调试真机之后才慢慢体会到的。随手记下来,既是个人沉淀,也希望给同样做鸿蒙开发的同学一点参考。
一、DevEco Studio 日常碎记
- 模拟器很香,但永远不能替代真机
模拟器跑 UI 布局、基础逻辑没问题,但是权限、NPU 能力、硬件传感器、内存限制、动画渲染、后台生命周期,和真机行为经常不一致。
好几次模拟器跑通的代码,上真机直接报错。尤其是悬浮窗、碰一碰、三维重建这类和系统硬件深度绑定的能力,真机才是唯一标准。远程真机是很好的补充,但网络波动会打断调试流程,核心功能尽量找实体真机。 - 清理项目的小习惯
经常遇到:改了代码预览不更新、资源图片不刷新、编译莫名报奇奇怪怪的符号缺失。优先做三件事:Build -> Clean Project,删除.ohos缓存目录,重启 DevEco。
不要一上来怀疑 SDK 或者框架 bug,大概率是缓存作祟。 - 预览器的局限
预览器本质是轻量渲染环境,部分 API、动画、路由生命周期、弹窗权限相关代码,预览器不会执行。
写代码不要完全依赖预览器判断逻辑是否正常,预览只能用来快速调样式。
二、ArkTS / Stage 模型开发随笔
- Stage 模型是大势,FA 模型尽量不要再新项目使用
现在新开放的系统能力,闪控窗、碰一碰、各类 AI Kit,全部只支持 Stage 模型。FA 模型基本不再新增能力,后续适配新版本 API 会越来越吃力。
老项目如果维护还好,新项目直接 Stage 起步,减少后续迁移成本。 - 状态变量不要滥用
@State
很多新手一写页面,所有变量全部加@State,页面稍微复杂一点就会带来不必要的重渲染。
简单区分:页面内 UI 需要响应变化才用@State;跨组件用@Prop/@ObjectLink;全局状态用AppStorage。普通临时变量,不需要装饰器。
状态管理是 ArkTS 性能优化最容易忽略的地方。 - 页面生命周期和安卓、前端不完全一样,不要惯性套用
做前端习惯了 vue/react 生命周期,上手鸿蒙很容易踩坑。
比如 UI 组件销毁时机、后台切前台的触发顺序、弹窗和页面之间生命周期嵌套,和 Web 前端差异很大。
调试复杂页面时,在onPageShow、onPageHide、aboutToDisappear埋日志打印,理清执行顺序,比猜逻辑高效很多。
三、权限开发:最容易反复踩的 "小事"
- 区分静态声明权限、动态用户授权权限
在module.json5写上权限,不等于拿到权限 。
像悬浮窗、图库、位置这类敏感权限,代码里必须主动调用接口向用户弹窗申请。很多新人只配置 json5,真机调用 API 直接返回权限拒绝,排查半天。 - 权限有设备、API 版本差异
同一个权限,API10 和 API26,约束范围可能变化。部分能力在平板、手机、PC 上权限策略不一样。
写权限逻辑,最好增加错误码捕获,权限拒绝时做降级 UI 提示,不要直接 crash。
四、多设备适配的一点感悟
- 不要写死固定 px 像素
手机、折叠屏、平板、PC,屏幕尺寸、像素密度差异巨大。硬编码宽高,在小屏溢出、大屏布局挤在一起。
优先用vp单位、flex 弹性布局、断点、窗口尺寸监听。写一次布局,尽量能在多端自适应。 - 折叠屏形态切换,最容易出隐性 bug
折叠、展开过程,页面会重建或者重新布局。很多网络请求、视频、相机、动画,在形态切换时会异常。
开发的时候,记得反复来回折叠测试,很多静态页面看不出来的 bug,形态切换瞬间暴露。
五、关于各类 Kit 的开发感受
- 系统 Kit 能力很强,但都有硬件门槛
Spatial Recon 三维重建、文搜图、NPU 相关 AI 能力,不是所有机型都支持。旗舰芯片完整支持,中端设备会降级,低配设备直接不提供接口。
写业务一定要做能力判断和降级方案,不能默认所有设备都支持。用户设备不支持时,友好提示,而不是直接报错。 - 三方库移植,需要耐心
很多 JS/TS 前端库不能直接原样搬到鸿蒙,部分底层依赖浏览器 API(window、document),移植时需要做适配改造。
优先查找鸿蒙社区已经适配好的版本;没有现成版本再自己改造,评估工作量。
六、个人开发小习惯
- 重要的回调、监听、定时器,页面退出一定要销毁
事件监听、自定义 session、定时器、资源句柄,如果页面销毁不释放,很容易内存泄漏。页面反复打开关闭,内存持续上涨,最后应用卡顿闪退。
养成配对写法:创建 -> 页面销毁时销毁。 - 善用日志,不要单纯靠断点调试
真机断点有时候中断时机不好控制。业务关键节点,用hilog打印信息、错误码,事后回看日志定位问题,比断点更适合硬件、生命周期类问题。 - 不要追最新 API 盲目升级
新 API 能力强,但文档、社区案例少,兼容性风险高。正式项目不要第一时间直接升级到刚发布的 Beta API;Demo 可以尝鲜,线上项目等稳定版本。
结尾随笔
鸿蒙开发是一件很有意思的事情,不只是写 UI 页面,需要同时考虑多设备、硬件、权限、NPU、跨端协同,比单纯前端开发知识面更广。
经常会遇到文档写得简略、模拟器与真机行为不一致的问题,很多能力需要真机反复调试试错。
踩坑本身也是积累的过程,把零散的问题随手记录,慢慢就形成自己的一套开发经验。
互动提问:你做鸿蒙开发时,有没有遇到过模拟器正常、真机翻车的经历?欢迎评论区聊聊。