引言
由于公司开始支持鸿蒙生态,小编也开启了鸿蒙纯血NEXT
版本的应用开发。
本篇主要整理总结实战项目中遇到的问题及重点知识内容。适合使用ArkTS进行鸿蒙NEXT及以上版本开发的初学者、进阶学习者。
内容分为以下几个维度,欢迎大家一起交流学习。
ArkTS 语言
使用ArkTs语言进行开发,了解如下两点即可
1. 数据类型
ArkTS支持的数据类型如下:
Object、string、number、boolean、enum 、Array、union、void、aliases、Record、Map 等。
下面列举一些个例的特性:
2. 语法特点
ArkTS的语法与其他前端语言大同小异,下面列举一些个例的特性:
PS:需要注意的是,字符串里插入变量要使用`符号而不是单引号或双引号,如下:
HarmonyOS 的项目结构
关于 HarmonyOS 的项目包结构,我们暂时不需要做到 全盘掌握,了解如下几个知识点即可:
1. 项目类型
创建项目分为两种类型,分别是 app(应用)、atomicService( 元服务)
这两种类型的项目创建后的包结构是一样的,代码编辑也一致。重点差异如下:
- 元服务类似于微信小程序,用户可直接在手机的负一层页面搜索使用,无需下载
- 元服务的开发api是应用的开发api的子集,即有些api在开发应用时可用,在开发元服务时不可用。
2. 模块类型
创建模块分为三种类型,分别是 hap、har、hsp
- HAP:应用安装和运行的基本单元,分为两种类型:entry和feature
- HAR:静态共享包 (可以理解为封装的 Library,里面可以存放代码和资源,提供给 hap 或者 har 模块进行引用)
- HSP:动态共享包(一般应用不常用),和静态包类似,用于封装公共 Library。
静态包和动态包差异点:
- HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。
- 动态包可用于分包模式,例如元服务对每个hap包有大小 2M 的限制,通过分包,
preload
的方式满足发布条件。 分包链接->
3. 重点文件
- app.json5 :bundleType 标识 元服务(atomicService)或 应用(app)
- module.json5 :stage模型模块配置文件,type 标识模块类型(entry、hap、har、share)
- oh-package.json5 :配置三方包声明文件的入口及包名
最后展示一张项目的包结构截图:
UI 开发中的实用技巧
1. 单位
- fp: 字体像素单位,随系统字体大小设置变化
- vp: 密度像素单位
2. @Extend
定义扩展组件样式
3. @Styles
定义组件重用样式
4. 自定义组件 @Builder 和 @BuilderParam
5. 生命周期
- 自定义组件:@Component装饰的UI单元,可以调用组件的生命周期。
- 页面:可以由一个或者多个自定义组件组成,只有被@Entry装饰的组件才可以调用页面的生命周期。
- onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件生效。
- onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景,仅@Entry装饰的自定义组件生效。
- onBackPress:当用户点击返回按钮时触发,仅@Entry装饰的自定义组件生效。
- aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。
- aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。
HarmoneyOS 的状态管理
1. 组件的状态管理
建议看一遍官网的示例
2. 应用的状态管理
PS:重点提一下 LocalStorage 和 AppStorage 的区别,LocalStorage 是页面级存储、页面内共享,而 AppStorage 是可以跨 Ability 共享的。(即适用于多hap项目)
应用开发中常用方法
1. Toast 的使用
2. Preferences 的使用
3. Context
4. JSON 与 Object 的转换
5. Http 的使用
使用官方提供的 HTTP模块:
PS:后期小编会封装一个简化代码的静态库提供使用
6. 路由的选择与使用
路由提供两种选择方案:
组件 | 适用场景 | 特点 | 转场动画效果对比 |
---|---|---|---|
Router | 模块间与模块内页面切换 | 通过每个页面的url实现模块间解耦 | 页面平推转场效果 |
NavPathStack | 模块内页面切换 | 通过组件级路由统一路由管理 | 向右折叠转场效果 |
- Router的使用
- NavPathStack的使用
小编使用的方案是 NavPathStack ,下面来重点说说使用方式。
NavPathStack
是配合 Navigation
一起使用的,
Navigation导航组件做统一的页面跳转管理,它提供了一系列属性方法来设置页面的标题栏、工具栏以及菜单栏的各种展示样式。
附注
Demo 示例已上传:
GitHub: https://github.com/liyufengrex/HarmonyAtomicService
GitCode: https://gitcode.com/liyufengrex/HarmonyAtomicService
(基于API11开发,支持NEXT及以上版本运行)已上传可供参考,包含如下内容:
- 静态库+动态包+多模块设计
- 状态管理
- 统一路由管理(router+navPathStack)
- 网络请求、Loading 等工具库封装
- 自定义组件、自定义弹窗(解耦)
- EventBus 事件通知
- 扩展修饰器,实现 节流、防抖、权限申请
- 动态路由 (navPathStack + 动态import + WrappedBuilder)
- UI动态节点操作 (BuilderNode + NodeController)
- 折叠屏适配示例
- 组件工厂示例
- 组件动态属性设置示例
- 云函数、云数据库使用示例
- 华为账号服务示例(快速登陆、快速验证手机号)