鸿蒙开发日常随笔|写代码、调真机、踩坑碎碎念

前言

平时写正式复盘、踩坑笔记比较多,今天换个风格,记录一些鸿蒙开发里细碎、真实的日常感受。很多问题算不上重大 bug,却会反复消耗开发时间;很多感悟是反复调试真机之后才慢慢体会到的。随手记下来,既是个人沉淀,也希望给同样做鸿蒙开发的同学一点参考。

一、DevEco Studio 日常碎记

  1. 模拟器很香,但永远不能替代真机
    模拟器跑 UI 布局、基础逻辑没问题,但是权限、NPU 能力、硬件传感器、内存限制、动画渲染、后台生命周期,和真机行为经常不一致。
    好几次模拟器跑通的代码,上真机直接报错。尤其是悬浮窗、碰一碰、三维重建这类和系统硬件深度绑定的能力,真机才是唯一标准。远程真机是很好的补充,但网络波动会打断调试流程,核心功能尽量找实体真机。
  2. 清理项目的小习惯
    经常遇到:改了代码预览不更新、资源图片不刷新、编译莫名报奇奇怪怪的符号缺失。优先做三件事:Build -> Clean Project,删除.ohos缓存目录,重启 DevEco。
    不要一上来怀疑 SDK 或者框架 bug,大概率是缓存作祟。
  3. 预览器的局限
    预览器本质是轻量渲染环境,部分 API、动画、路由生命周期、弹窗权限相关代码,预览器不会执行。
    写代码不要完全依赖预览器判断逻辑是否正常,预览只能用来快速调样式。

二、ArkTS / Stage 模型开发随笔

  1. Stage 模型是大势,FA 模型尽量不要再新项目使用
    现在新开放的系统能力,闪控窗、碰一碰、各类 AI Kit,全部只支持 Stage 模型。FA 模型基本不再新增能力,后续适配新版本 API 会越来越吃力。
    老项目如果维护还好,新项目直接 Stage 起步,减少后续迁移成本。
  2. 状态变量不要滥用@State
    很多新手一写页面,所有变量全部加@State,页面稍微复杂一点就会带来不必要的重渲染。
    简单区分:页面内 UI 需要响应变化才用@State;跨组件用@Prop/@ObjectLink;全局状态用AppStorage。普通临时变量,不需要装饰器。
    状态管理是 ArkTS 性能优化最容易忽略的地方。
  3. 页面生命周期和安卓、前端不完全一样,不要惯性套用
    做前端习惯了 vue/react 生命周期,上手鸿蒙很容易踩坑。
    比如 UI 组件销毁时机、后台切前台的触发顺序、弹窗和页面之间生命周期嵌套,和 Web 前端差异很大。
    调试复杂页面时,在onPageShow、onPageHide、aboutToDisappear埋日志打印,理清执行顺序,比猜逻辑高效很多。

三、权限开发:最容易反复踩的 "小事"

  1. 区分静态声明权限、动态用户授权权限
    在module.json5写上权限,不等于拿到权限 。
    像悬浮窗、图库、位置这类敏感权限,代码里必须主动调用接口向用户弹窗申请。很多新人只配置 json5,真机调用 API 直接返回权限拒绝,排查半天。
  2. 权限有设备、API 版本差异
    同一个权限,API10 和 API26,约束范围可能变化。部分能力在平板、手机、PC 上权限策略不一样。
    写权限逻辑,最好增加错误码捕获,权限拒绝时做降级 UI 提示,不要直接 crash。

四、多设备适配的一点感悟

  1. 不要写死固定 px 像素
    手机、折叠屏、平板、PC,屏幕尺寸、像素密度差异巨大。硬编码宽高,在小屏溢出、大屏布局挤在一起。
    优先用vp单位、flex 弹性布局、断点、窗口尺寸监听。写一次布局,尽量能在多端自适应。
  2. 折叠屏形态切换,最容易出隐性 bug
    折叠、展开过程,页面会重建或者重新布局。很多网络请求、视频、相机、动画,在形态切换时会异常。
    开发的时候,记得反复来回折叠测试,很多静态页面看不出来的 bug,形态切换瞬间暴露。

五、关于各类 Kit 的开发感受

  1. 系统 Kit 能力很强,但都有硬件门槛
    Spatial Recon 三维重建、文搜图、NPU 相关 AI 能力,不是所有机型都支持。旗舰芯片完整支持,中端设备会降级,低配设备直接不提供接口。
    写业务一定要做能力判断和降级方案,不能默认所有设备都支持。用户设备不支持时,友好提示,而不是直接报错。
  2. 三方库移植,需要耐心
    很多 JS/TS 前端库不能直接原样搬到鸿蒙,部分底层依赖浏览器 API(window、document),移植时需要做适配改造。
    优先查找鸿蒙社区已经适配好的版本;没有现成版本再自己改造,评估工作量。

六、个人开发小习惯

  1. 重要的回调、监听、定时器,页面退出一定要销毁
    事件监听、自定义 session、定时器、资源句柄,如果页面销毁不释放,很容易内存泄漏。页面反复打开关闭,内存持续上涨,最后应用卡顿闪退。
    养成配对写法:创建 -> 页面销毁时销毁。
  2. 善用日志,不要单纯靠断点调试
    真机断点有时候中断时机不好控制。业务关键节点,用hilog打印信息、错误码,事后回看日志定位问题,比断点更适合硬件、生命周期类问题。
  3. 不要追最新 API 盲目升级
    新 API 能力强,但文档、社区案例少,兼容性风险高。正式项目不要第一时间直接升级到刚发布的 Beta API;Demo 可以尝鲜,线上项目等稳定版本。

结尾随笔

鸿蒙开发是一件很有意思的事情,不只是写 UI 页面,需要同时考虑多设备、硬件、权限、NPU、跨端协同,比单纯前端开发知识面更广。

经常会遇到文档写得简略、模拟器与真机行为不一致的问题,很多能力需要真机反复调试试错。

踩坑本身也是积累的过程,把零散的问题随手记录,慢慢就形成自己的一套开发经验。

互动提问:你做鸿蒙开发时,有没有遇到过模拟器正常、真机翻车的经历?欢迎评论区聊聊。

相关推荐
ToDesk_Daas10 小时前
深度适配鸿蒙生态,ToDesk 迎来版本升级,全面优化远程操控体验
华为·harmonyos
贾伟康10 小时前
【化学实验室|15】HarmonyOS ArkTS 本地状态持久化实战:让保存、删除和页面返回后的数据即时一致
harmonyos·arkts·本地存储·arkui·preferences
行者-全栈开发17 小时前
【共创稿事节】HarmonyOS 7 轻量悬浮窗口选型与闪控窗接入:闪控球、闪控窗、系统悬浮窗到底怎么选
harmonyos·鸿蒙·arkui·闪控窗·api 26·选型决策树·闪控球
OH_TPC18 小时前
@ohos/axios 源码解读(二):适配层是一场翻译,而翻译要处理四类错位
harmonyos
fleaxin20 小时前
华为 Atlas 300V 兼容性测试报告
华为·pve·atlas
腾科IT教育1 天前
HCIP-Security 华为Portal认证技术与配置解析
网络·华为·portal·hcip-security
CV工程师丁Sir1 天前
ArkWeb 手记 11:Web 组件与原生动画的协同
harmonyos·混合开发·arkweb
李&@杰1 天前
交换机网络环路导致MAC漂移及业务中断故障处理
网络·华为
CV工程师丁Sir1 天前
ArkWeb 手记 12:Web 组件内存泄漏排查实录
性能优化·harmonyos·arkweb