鸿蒙(HarmonyOS)开发学习笔记分享,自学必备(内含惊喜大礼包 需要自取)

229 阅读10分钟

一、鸿蒙自学规划与准备

1.1 学习前的自我评估

在开始鸿蒙学习前,建议先评估自己的技术基础,以便制定合适的学习计划:

必备基础

  • 基本编程概念(变量、函数、循环等)

  • 面向对象思想(类、对象、继承等)

  • 简单的前端知识(HTML/CSS 基础,有助于理解 ArkUI)

技能自测

  • 能否用 Java 或 JavaScript 写出简单的计算器程序?

  • 是否了解 JSON 数据格式和基本网络请求概念?

  • 有没有 UI 界面开发经验?

学习心态

  • 耐心:鸿蒙开发涉及新概念,需要循序渐进
  • 动手:每周至少 20 小时实际编码练习
  • 坚持:遇到问题不要轻易放弃,社区和文档是你的好帮手

1.2 高效学习时间规划

根据学习目标不同,推荐两种时间规划方案:

方案一:业余学习(每天 2-3 小时)

  • 周一至周五:每天学习一个核心知识点,周末进行项目实践

  • 第一周:开发环境搭建 + ArkTS 基础语法

  • 第二周:ArkUI 组件与布局

  • 第三周:状态管理与页面路由

  • 第四周:综合项目实战

方案二:集中学习(每天 6-8 小时)

  • 前 3 天:基础语法与开发环境

  • 4-7 天:UI 开发与状态管理

  • 8-10 天:分布式能力与数据存储

  • 11-15 天:完整项目开发与优化

学习节奏建议

  • 每学习 45 分钟休息 10 分钟
  • 每周安排半天复习时间,整理笔记和错题
  • 每月完成一个阶段性项目,检验学习成果

二、核心知识笔记整理

2.1 鸿蒙开发核心概念图解

鸿蒙系统架构

┌─────────────────────────────────┐
│  应用层  │ 系统应用、第三方应用、元服务       │
├─────────────────────────────────┤
│  框架层  │ ArkUI、ArkTS、分布式应用框架      │
├─────────────────────────────────┤
│ 系统服务层 │ 分布式软总线、数据管理、任务调度   │
├─────────────────────────────────┤
│  内核层  │ LiteOS/Linux内核、驱动框架       │
└─────────────────────────────────┘

南向开发 vs 北向开发

维度南向开发北向开发
开发目标硬件驱动、内核优化应用开发、用户界面
技术栈C/C++、驱动框架 HDFArkTS、ArkUI、JavaScript
工具DevEco Device ToolDevEco Studio
应用场景智能硬件、物联网设备手机应用、跨设备应用

2.2 关键技术难点解析

状态管理装饰器对比

  • @State:组件内部状态,修改会触发 UI 刷新

  • @Prop:父子组件单向数据传递

  • @Link:父子组件双向数据绑定

  • @Provide/@Consume:跨组件层级数据共享

使用原则

  • 局部状态用@State

  • 父子通信优先用@Prop+ 事件回调

  • 深层嵌套组件通信才用@Provide/@Consume

  • 全局状态考虑用AppStorage

分布式能力核心

  1. 软总线:设备发现与通信通道

  2. 分布式数据:跨设备数据同步

  3. 任务调度:多设备协同完成任务

实现步骤

1. 设备发现:DeviceManager.discoverDevices()
2. 设备认证:建立安全连接
3. 能力发布:将本地服务发布到其他设备
4. 远程调用:通过RPC调用其他设备服务

2.3 易混淆知识点辨析

Stage 模型 vsFA 模型

  • Stage 模型(推荐):

    • 单进程多 Ability
    • 支持 Ability 内多页面
    • 内存占用更低,性能更好
  • FA 模型(旧版):

    • 多进程架构

    • 每个 Page 单独进程

    • 适合简单应用

开发选择:新项目优先使用 Stage 模型,旧项目可逐步迁移

ArkTS 与 TypeScript

  • 相同点:基础语法一致,支持 TypeScript 大部分特性

  • 差异点:

    • ArkTS 增加状态管理装饰器
    • 支持声明式 UI 语法
    • 提供更严格的静态检查

三、高效笔记整理方法

3.1 结构化笔记模板

推荐模板

# 【主题】鸿蒙状态管理

## 1. 概念理解
- 核心思想:数据驱动UI
- 适用场景:...

## 2. 关键知识点
- @State装饰器
  - 作用:组件内部状态管理
  - 示例:...
- @Prop装饰器
  - 作用:父子组件数据传递
  - 注意事项:...

## 3. 实践案例
- 计数器实现
  - 代码思路:...
  - 效果展示:...

## 4. 常见问题
- Q: 状态更新后UI不刷新?
- A: 检查是否用新对象替换数组/对象

## 5. 参考资料
- 官方文档链接
- 相关案例链接

使用技巧

  • 每个知识点单独成页,便于后续整理
  • 使用 #标签分类,如 #状态管理、# 布局组件
  • 重要内容用**加粗,重点突出

3.2 思维导图学习法

核心知识脑图结构

鸿蒙开发
├─ 开发环境
│  ├─ DevEco Studio安装
│  ├─ 模拟器配置
│  └─ 真机调试
├─ 核心技术
│  ├─ ArkTS语法
│  ├─ ArkUI组件
│  └─ 状态管理
├─ 分布式能力
│  ├─ 设备发现
│  ├─ 数据同步
│  └─ 任务调度
└─ 项目实战
   ├─ 待办应用
   ├─ 天气应用
   └─ 智能家居控制

推荐工具:XMind、MindNode、FreeMind

使用建议

  • 每周学习结束后绘制知识脑图,检验知识体系完整性
  • 用不同颜色区分已掌握和待巩固知识点
  • 定期更新脑图,添加新学到的内容

3.3 错题集与问题跟踪

错题集格式

## 问题描述
使用@Link装饰器时出现编译错误,提示"Property 'xxx' does not exist"

## 错误代码
@Component
struct ChildComponent {
  @Link count: number
  
  build() {
    Button('+')
      .onClick(() => {
        this.count++
      })
  }
}

## 错误原因
父组件传递参数时使用了错误的属性名,与子组件@Link变量名不一致

## 正确代码
// 父组件
ChildComponent({ count: $parentCount })

## 知识点总结
@Link变量名必须与父组件传递的参数名完全一致,区分大小写

问题跟踪表

日期问题描述解决方法相关知识点
2025.3.15模拟器启动失败开启 BIOS 虚拟化支持开发环境配置
2025.3.18状态变量未触发 UI 更新创建新数组替换原数组@State 装饰器
2025.3.22分布式数据同步失败添加分布式权限并申请授权分布式能力

四、学习资源精选推荐

4.1 官方资源(首选)

文档与教程

b23.tv/xevakl1

  • 《HarmonyOS 应用开发白皮书》:生态全景介绍

  • [HarmonyOS 第一课]:视频课程

代码示例

  • HarmonyOS Samples:官方示例代码库
  • Codelabs:交互式编程练习

4.2 第三方优质资源

视频课程

b23.tv/xevakl1

社区与博客

b23.tv/xevakl1

  • 鸿蒙开发者社区:经验分享与问题解答

  • 掘金:鸿蒙开发专栏

  • 知乎:鸿蒙技术话题讨论

书籍推荐

  • 《鸿蒙应用开发实战》:适合入门
  • 《ArkTS 语言开发详解》:深入语言特性
  • 《鸿蒙分布式应用开发》:特色能力详解

4.3 学习资源使用策略

资源筛选原则

  • 优先选择官方资源和最新内容(2024 年后)

  • 视频课程与文档结合学习,视频学操作,文档学原理

  • 每个知识点至少参考两个不同来源的资料

资源管理方法

  • 使用 Notion 建立资源库,分类整理优质链接
  • 收藏重要网页时立即添加简短笔记,记录推荐理由
  • 定期清理过期资源,保持资源库时效性

五、实战项目笔记范例

5.1 项目规划与需求分析

待办事项应用规划

  • 核心功能:添加 / 删除 / 修改待办、标记完成状态、数据持久化

  • 技术点

    • ArkUI 布局(List、Button、TextInput)

    • 状态管理(@State、@Prop)

    • 数据存储(Preferences)

    • 页面路由(router 模块)

项目结构

entry/src/main/ets/
├── pages/
│   ├── TodoList.ets    // 待办列表页
│   └── TodoDetail.ets  // 待办详情页
├── components/
│   └── TodoItem.ets    // 待办项组件
└── models/
    └── TodoModel.ets   // 数据模型

5.2 开发过程中的问题与解决方案

问题 1:长列表滑动卡顿

  • 现象:待办项超过 20 条时滑动不流畅

  • 原因:使用 ForEach 渲染所有列表项,未做懒加载

  • 解决方案:改用 LazyForEach 实现列表项懒加载

// 优化前
List() {
  ForEach(this.todos, (item) => {
    ListItem() { TodoItem({ todo: item }) }
  })
}

// 优化后
List() {
  LazyForEach(this.todoDataSource, (item) => {
    ListItem() { TodoItem({ todo: item }) }
  })
}

问题 2:数据持久化失败

  • 现象:应用重启后数据丢失

  • 原因:Preferences 未正确调用 flush () 方法

  • 解决方案

// 保存数据
async saveTodos() {
  try {
    await this.preferences.put('todos', JSON.stringify(this.todos));
    await this.preferences.flush(); // 确保数据写入磁盘
  } catch (e) {
    console.error('保存失败', e);
  }
}

5.3 项目总结与经验提炼

开发心得

  1. 组件化思想:将 UI 拆分为小组件,提高复用性

  2. 状态管理:合理规划状态作用域,避免状态混乱

  3. 错误处理:所有异步操作必须添加 try-catch

  4. 性能优化:列表使用 LazyForEach,图片使用缓存

待优化点

  • 添加待办分类功能
  • 实现待办搜索
  • 添加数据备份与恢复
  • 支持待办优先级设置

六、学习工具与效率提升

6.1 笔记软件推荐

Notion

  • 优势:支持 Markdown、数据库功能、多设备同步

  • 适用场景:知识体系构建、学习计划管理

  • 模板推荐:学习笔记模板、项目管理看板

Obsidian

  • 优势:本地存储、双向链接、知识图谱

  • 适用场景:构建个人知识库、深度笔记整理

  • 插件推荐:思维导图、标签管理、图表生成

OneNote

  • 优势:自由排版、手写笔记支持、Office 集成
  • 适用场景:课堂笔记、会议记录
  • 使用技巧:利用分区功能组织不同学习阶段内容

6.2 开发效率工具

DevEco Studio 插件

  • CodeGenie:AI 辅助编程,生成代码和注释

  • HarmonyOS Theme:主题美化,减少视觉疲劳

  • ArkTS Code Snippets:代码片段,快速插入常用代码

效率提升工具

  • HDC 命令行工具:设备调试和日志查看
  • Ohpm 包管理器:鸿蒙第三方库管理
  • 鸿蒙模拟器:多设备同时调试

6.3 社区与学习伙伴

推荐社区

b23.tv/xevakl1

七、自学常见问题与解决方法

7.1 技术难点突破

问题:声明式 UI 思维转变困难

  • 表现:习惯了命令式编程,难以适应声明式 UI

  • 解决方法

    1. 先画 UI 草图,再用声明式语法描述

    2. 从简单页面开始,逐步复杂

    3. 分析官方示例,模仿写法

问题:分布式能力理解困难

  • 解决方法

    1. 用生活例子类比:把设备看作团队成员,软总线看作沟通工具
    2. 从简单设备发现开始,逐步尝试数据共享
    3. 参考官方 Codelabs 分布式案例

7.2 学习动力维持

动力不足的解决策略

  • 目标分解:将 "学会鸿蒙开发" 分解为小目标,如 "本周实现登录功能"

  • 进度可视化:使用 GitHub 贡献图记录每日学习时间

  • 成果展示:定期将项目部署到真机,体验成就感

  • 社区激励:在技术社区分享学习心得,获得反馈和鼓励

避免 burnout

  • 设定合理学习时间,不要熬夜编程
  • 每周安排一天完全休息,避免疲劳积累
  • 参与线下技术 meetup,结交同好

7.3 学习效率提升

番茄工作法应用

  • 25 分钟专注学习 + 5 分钟休息

  • 每完成 4 个番茄钟,休息 15-20 分钟

  • 使用 Forest 等 APP 记录专注时间

知识巩固方法

  • 学习后 24 小时内复习一次
  • 用自己的话重述知识点
  • 给他人讲解学到的内容
  • 制作思维导图,梳理知识体系

结语:我的鸿蒙自学心得

经过三个月的自学,我从零基础成长为能够独立开发简单鸿蒙应用的开发者。回首这段学习历程,最深的体会是:坚持比天赋更重要。鸿蒙开发涉及不少新概念,但只要按照合理的学习路径,每天积累一点,终能掌握。