个人 HarmonyOS 开发学习站

把鸿蒙开发文档,读成能动手的笔记。

从应用模型开始,逐项弄懂 ArkTS、ArkUI 和多设备适配。

先读 Stage 模型
HarmonyOS 个人学习地图 从 ArkTS 语言、Stage 应用模型和 ArkUI 界面出发,延伸到手机、平板和电脑设备的学习关系图。 PERSONAL STUDY MAP 从代码到多设备 语言 ArkTS 应用模型 Stage 声明式界面 ArkUI 运行与验证 DevEco Studio 手机 平板 电脑

应用模型笔记

先把 Stage 模型讲清楚

我把它理解为一套应用组件的组织方式。HAP 负责装载模块,AbilityStage 管理模块级运行环境,UIAbility 承载一个可交互的界面能力,WindowStage 再给 ArkUI 页面提供绘制窗口。

一次冷启动里,我会关注这四件事

  1. 装载 HAPEntry 或 Feature 类型的 HAP 首次加载进进程时,系统创建对应的 AbilityStage。
  2. 创建 UIAbilityUIAbility 负责包含界面的应用组件,并通过生命周期回调处理启动、前后台切换等状态。
  3. 建立 WindowStage每个 UIAbility 实例会绑定一个 WindowStage,它持有主窗口,为 ArkUI 提供绘制区域。
  4. 加载页面通常在 onWindowStageCreate 中调用 loadContent,把 pages/Index 之类的 ArkUI 页面放进主窗口。

参考:华为开发者联盟 Stage 模型开发概述

语言笔记

ArkTS 不只是换了文件后缀

它保留 TypeScript 的基本风格,同时加强静态检查,限制部分动态写法。目的不是增加语法负担,而是尽量把问题提前到编译阶段。

最先遇到的差别

对象形状要尽早确定

在普通 JavaScript 或 TypeScript 中,代码可能在运行时给对象增删属性。ArkTS 更强调固定对象布局。对象字面量最好明确标注类型,可能缺失的数据也要在类型定义里提前表达。

interface Note {
  title: string
  pinned?: boolean
}

const item: Note = {
  title: '读懂 Stage 模型'
}

静态检查更严格

很多原本可能拖到运行时才暴露的问题,会在开发阶段被检查出来。迁移现有 TS 代码时,不能默认所有动态用法都能直接通过。

声明式 UI 与状态绑定

ArkTS 配合 ArkUI 描述界面,并通过状态变量驱动局部刷新。阅读旧示例时要注意状态管理 V1 与 V2 的装饰器差异。

并发有自己的模型

TaskPool、Worker 与 Sendable 用来处理并发任务和对象传递。耗时工作不能只靠把同步逻辑塞进页面回调。

参考:ArkTS 语言概览ArkTS 开发入门

多设备笔记

一次开发,不等于把手机界面直接拉宽

多端适配要同时检查布局、输入方式、设备能力和任务连续性。我目前用下面这张清单检查每个页面。

布局

先按断点改变结构,再处理局部尺寸

窄屏可以单列阅读,宽屏可以增加分栏。重点是信息层级是否改变,而不只是把宽度从百分比改成固定值。

交互

触摸、鼠标和键盘都要能完成任务

悬停效果不能成为唯一入口。焦点顺序、快捷键和可点击区域也属于多设备体验的一部分。

能力

调用 API 前先确认 SysCap

同一个接口不一定在所有设备形态上都有相同支持。功能设计要准备能力判断和合理的降级路径。

验证

预览器看布局,模拟器和真机看行为

静态预览适合快速检查页面,涉及系统权限、窗口、设备协同和性能时,仍然需要在对应环境验证。

参考:HarmonyOS 多设备开发最佳实践

动手路径

我现在怎样搭一个最小应用

先让一条最短链路跑通,再增加状态、数据和系统能力。这样遇到错误时,更容易判断问题发生在哪一层。

  1. 创建工程用 DevEco Studio 新建 Stage 模型工程,先保留最小 Entry 模块。
  2. 确认入口找到 EntryAbility,确认 WindowStage 加载的首页路径。
  3. 修改页面在 pages/Index 中先完成一个可见文本和一次点击反馈。
  4. 逐层验证先预览布局,再用模拟器或真机检查生命周期和系统能力。
EntryAbility.ets最小页面加载关系
import { UIAbility } from '@kit.AbilityKit'
import { window } from '@kit.ArkUI'

export default class EntryAbility extends UIAbility {
  onWindowStageCreate(
    windowStage: window.WindowStage
  ): void {
    windowStage.loadContent('pages/Index')
  }
}

示例只保留主干。正式工程还要处理错误回调、资源配置与目标 API 的具体要求。

资料从哪里来

技术页面会优先引用官方开发文档,并把个人理解写在原文链接旁边。系统版本、API 和开发工具都会变化,读者应回到原文确认当前要求。

关于本站

这是一个个人学习网站

作为一名个人学习者,我对操作系统、设备协同和应用开发感兴趣。建立这个网站,是为了把阅读过的官方资料、写过的示例和实际体验整理成可以回看的个人笔记。

本站仅用于非经营性的学习记录与资讯摘记,不提供商品销售、付费咨询、用户注册、论坛或评论服务。

本站为非官方网站,与华为及其他企业、机构不存在隶属、合作或授权关系。HarmonyOS 及相关名称和标识的权利归其合法权利人所有。