当前位置: 首页 > news >正文

HarmonyOS开发实战:小分享-SplashPage启动页设计与2秒延时跳转

前言

启动页(Splash Page)是用户首次打开应用看到的第一个页面,常用于品牌展示、初始化资源、版本检查等场景。本篇以小分享 App 的SplashPage为例,讲解启动页的设计要点、延时跳转实现与@Builder装饰器的应用。详细 API 可参考 HarmonyOS ArkUI 官方文档。

一、SplashPage 完整代码

1.1 SplashPage.ets 全文

小分享 App 的pages/SplashPage.ets如下:

import router from '@ohos.router'; @Entry @Component struct SplashPage { @State showSplash: boolean = true; aboutToAppear(): void { setTimeout(() => { router.replaceUrl({ url: 'pages/HomePage' }); }, 2000); } build() { Column() { Column({ space: 24 }) { // App icon Column() { Text('') .fontSize(60) } .width(100) .height(100) .backgroundColor('#F5A623') .borderRadius(24) .justifyContent(FlexAlign.Center) .alignItems(HorizontalAlign.Center) Text('小分享') .fontSize(32) .fontWeight(FontWeight.Bold) .fontColor('#1A1A1A') Text('分享美好,连接世界') .fontSize(16) .fontColor('#F5A623') Text('一款强大而美观的分享工具') .fontSize(13) .fontColor('#999999') } .alignItems(HorizontalAlign.Center) .layoutWeight(1) .justifyContent(FlexAlign.Center) // Feature list Column({ space: 16 }) { this.FeatureItem('📝', '多种内容分享', '支持文字、图片、链接等多种内容') this.FeatureItem('🎨', '精美排版设计', '线装本排版,图文混排,支持模板') this.FeatureItem('⭐', '我的收藏管理', '一键收藏,随时查看和管理') this.FeatureItem('📋', '丰富模板库', '多种精美模板,一键套用') this.FeatureItem('📤', '一键分享', '支持多平台分享,触达更多人') } .width('100%') .padding({ left: 32, right: 32, bottom: 40 }) // Bottom button Button('小分享') .fontSize(16) .fontColor(Color.White) .backgroundColor('#F5A623') .width('60%') .height(48) .borderRadius(24) .onClick(() => { router.replaceUrl({ url: 'pages/HomePage' }); }) .margin({ bottom: 40 }) } .width('100%') .height('100%') .backgroundColor(Color.White) } @Builder FeatureItem(icon: string, title: string, desc: string) { Row({ space: 12 }) { Text(icon) .fontSize(20) Column({ space: 2 }) { Text(title) .fontSize(14) .fontWeight(FontWeight.Medium) .fontColor('#1A1A1A') Text(desc) .fontSize(12) .fontColor('#999999') } .alignItems(HorizontalAlign.Start) .layoutWeight(1) } .width('100%') } }

二、关键实现解析

2.1 aboutToAppear 生命周期

aboutToAppear是 ArkUI 页面组件的「前置生命周期」,在build之前调用,常用于:

  • 初始化状态
  • 发起网络请求
  • 启动定时器

小分享 App 在aboutToAppear中启动了一个 2 秒的延时跳转:

aboutToAppear(): void { setTimeout(() => { router.replaceUrl({ url: 'pages/HomePage' }); }, 2000); }

提示:setTimeout的回调会保留对组件的引用,组件销毁时务必clearTimeout,否则可能导致内存泄漏。

2.2 replaceUrl 的选择

启动页跳首页时使用replaceUrl而非pushUrl,原因是:

  • replaceUrl:销毁当前页,新页入栈
  • pushUrl:当前页保留,新页入栈

启动页跳走后不应该再被返回,所以用replaceUrl销毁启动页。

2.3 布局结构

布局结构如下:

Column (主容器) ├─ Column (logo + 标语区,layoutWeight(1) 撑开) ├─ Column (功能列表) └─ Button (底部按钮)

三、@Builder 装饰器详解

3.1 @Builder 的作用

@Builder是 ArkUI 提供的 UI 复用机制,用于封装可重复使用的 UI 片段,类似于其他框架中的「渲染函数」。

3.2 定义 Builder

小分享 App 定义了FeatureItemBuilder 来封装功能列表项:

@Builder FeatureItem(icon: string, title: string, desc: string) { Row({ space: 12 }) { Text(icon) .fontSize(20) Column({ space: 2 }) { Text(title) .fontSize(14) .fontWeight(FontWeight.Medium) .fontColor('#1A1A1A') Text(desc) .fontSize(12) .fontColor('#999999') } .alignItems(HorizontalAlign.Start) .layoutWeight(1) } .width('100%') }

3.3 调用 Builder

调用 Builder 时使用this.xxx()语法:

Column({ space: 16 }) { this.FeatureItem('📝', '多种内容分享', '支持文字、图片、链接等多种内容') this.FeatureItem('🎨', '精美排版设计', '线装本排版,图文混排,支持模板') this.FeatureItem('⭐', '我的收藏管理', '一键收藏,随时查看和管理') this.FeatureItem('📋', '丰富模板库', '多种精美模板,一键套用') this.FeatureItem('📤', '一键分享', '支持多平台分享,触达更多人') }

提示:@Builder的参数支持基础类型和对象,但不支持函数。

3.4 @Builder vs @Component

@Builder@Component的对比:

维度@Builder@Component
复用粒度UI 片段完整组件
状态管理共享外部状态独立状态
调用方式this.xxx()标签调用
适用场景简单 UI 复用复杂独立组件

四、aboutToAppear 时序详解

4.1 完整生命周期

ArkUI 页面组件的完整生命周期如下:

aboutToAppear → build → onAppear → (显示中) → onDisappear → aboutToDisappear

4.2 各阶段职责

各阶段职责如下:

  1. aboutToAppear:初始化状态、发请求、启动定时器
  2. build:构建 UI 树
  3. onAppear:页面已挂载,可访问 DOM 节点
  4. onDisappear:页面即将消失
  5. aboutToDisappear:组件即将销毁,清理资源

4.3 实战建议

实战建议如下:

  • 网络请求放在aboutToAppear
  • 动画启动放在onAppear
  • 资源释放放在aboutToDisappear

五、SplashPage 视觉设计

5.1 视觉元素

视觉元素如下:

  • App 图标:100 × 100,圆角 24,主色 #F5A623
  • 应用名「小分享」:32px 粗体
  • 副标题「分享美好,连接世界」:16px 主色
  • 描述「一款强大而美观的分享工具」:13px 灰色

5.2 功能列表

功能列表展示了 5 个核心功能:

图标功能描述
📝多种内容分享支持文字、图片、链接等多种内容
🎨精美排版设计线装本排版,图文混排,支持模板
我的收藏管理一键收藏,随时查看和管理
📋丰富模板库多种精美模板,一键套用
📤一键分享支持多平台分享,触达更多人

5.3 底部按钮

底部按钮设计如下:

Button('小分享') .fontSize(16) .fontColor(Color.White) .backgroundColor('#F5A623') .width('60%') .height(48) .borderRadius(24) .onClick(() => { router.replaceUrl({ url: 'pages/HomePage' }); }) .margin({ bottom: 40 })
  • 宽度:60%
  • 高度:48
  • 圆角:24(胶囊形)
  • 主色背景

六、延时跳转的优化

6.1 当前实现的问题

当前实现存在一个问题:用户如果不想等 2 秒,必须点底部按钮才能跳转。可以增加点击空白跳转:

build() { Column() { // ... 内容 } .width('100%') .height('100%') .backgroundColor(Color.White) .onClick(() => { router.replaceUrl({ url: 'pages/HomePage' }); }); }

6.2 增加加载进度

可以增加一个加载进度条,让用户更直观地感知跳转倒计时:

@Progress progress: number = 0; aboutToAppear(): void { const timer = setInterval(() => { this.progress += 5; if (this.progress >= 100) { clearInterval(timer); router.replaceUrl({ url: 'pages/HomePage' }); } }, 100); }

6.3 处理 setTimeout 的内存泄漏

处理setTimeout的内存泄漏:

private splashTimer: number = -1; aboutToAppear(): void { this.splashTimer = setTimeout(() => { router.replaceUrl({ url: 'pages/HomePage' }); }, 2000); } aboutToDisappear(): void { if (this.splashTimer !== -1) { clearTimeout(this.splashTimer); this.splashTimer = -1; } }

七、本篇核心知识点

7.1 SplashPage 设计要点

SplashPage 设计要点总结如下:

  1. 启动页用于品牌展示与初始化
  2. 使用replaceUrl跳转,避免返回启动页
  3. 通过aboutToAppear启动延时跳转
  4. @Builder封装可复用的功能列表项

7.2 @Builder 关键特性

@Builder关键特性总结如下:

  1. 用于封装可复用的 UI 片段
  2. 支持参数化
  3. 通过this.xxx()调用
  4. 适合简单 UI 复用,复杂组件用@Component

7.3 生命周期核心回调

生命周期核心回调总结如下:

  • aboutToAppear:初始化状态
  • build:构建 UI
  • onAppear:UI 已挂载
  • aboutToDisappear:清理资源

总结

本文详细讲解了 HarmonyOS SplashPage 启动页的设计与实现,结合小分享 App 的实际代码演示了aboutToAppearreplaceUrl@Builder等核心知识点。下一篇我们将看 HomePage 首页布局——Header + Scroll + BottomTabBar 三段式架构。

附录:完整实现细节

1. 核心 API 参考

API作用说明
本文涉及的核心 API功能实现参见华为官方文档

2. 完整代码示例

// 核心功能代码 // 详见正文中的完整实现

3. 常见问题排查

问题原因解决方案
编译错误import 路径错误检查路径和 API 版本
运行时异常参数不合法使用 try/catch 捕获
性能问题主线程耗时操作使用异步 API

4. 最佳实践

  1. 错误处理完善,使用 try/catch 包裹
  2. 资源及时释放,避免内存泄漏
  3. 异步操作使用 async/await
  4. 权限配置完整,按需申请

5. 完整代码文件索引

文件路径说明
本文涉及的代码文件见正文

6. 实现要点总结

核心实现要点:

  1. API 的正确使用方法和参数说明
  2. 完整的代码实现流程
  3. 常见问题的排查方案
  4. 性能优化和安全建议

7. 总结

本文详细讲解了小分享 App 中对应功能的完整实现。通过本文的学习,读者可以掌握 HarmonyOS 开发的核心 API 使用方法和最佳实践。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!

http://www.jsqmd.com/news/1247335/

相关文章:

  • 房颤必须要手术吗?——从临床数据与决策逻辑角度分析
  • 2026论文工具排行榜[特殊字符]实测好用的毕业论文辅助工具(性价比榜单)
  • DeepSeek-V4技术架构解析:万亿参数与多模态AI的突破
  • QoderWork:NAS-RL与业务流程优化的智能开发平台
  • VMD-CNN-LSTM融合算法在工业故障诊断中的应用
  • 营销前端高并发复盘:秒杀场景下的前端稳定性保障
  • 免费代理IP真的一无是处?爬虫老司机告诉你:能用,但要会用
  • 安全触边是什么?主要具备哪些保护功能与适用领域?
  • 重庆江津区江南职教中心2026年招生简章——交通方便,升学就业无忧 - 学习招生
  • ChatGPT Work:AI驱动的工作流自动化平台功能解析与部署指南
  • Java中的强引用、软引用、弱引用、虚引用
  • 自适应多步前瞻解码:扩散语言模型的高效加速技术解析
  • 成绩单翻译件需要学校盖章吗?不同申请场景的盖章要求
  • 小龙虾营销爆款方法论:从选题到转化的全链路拆解
  • 计算机毕业设计之基于springboot的商城后台管理系统的设计与实现
  • YOLOv8轻量化优化:Slim-Neck模块提升边缘设备检测效率
  • 药物研发数据的智能化管理:用知识图谱加速靶点发现的数据基座
  • Kimi K3与Claude API技术选型:成本控制与工程实践对比
  • 测试文章 001637 - 请忽略
  • 北京上门手表回收流程解析|2026 报价规则与正规回收机构筛选指南 - 全国二奢机构参考
  • 800G光模块的金钟罩:气密封装三道关怎么过?
  • 仅限高校图书馆员硕博导师领取:2024版《AI学术检索安全白皮书》——规避AI幻觉引用、自动标注伦理风险、生成可追溯检索日志的独家工作流(限时开放72小时)
  • TRF7960A RFID读写器固件调试:DBG宏与硬件触发联用实战
  • BQ28Z610阻抗跟踪算法:从核心原理到RSOC平滑、均衡配置实战
  • 华东理工:黑科技隐身材料来了!五元高熵合金 + 二维碳片,薄到 1.86mm 就能 “吃掉” 雷达波!
  • 2026跨境电商代账避坑指南:5大坑+辨别真假机构:深度解析合规路径与机构选型
  • TI RF430F5978EVM评估套件:超低功耗无线传感与3D定位开发指南
  • LocalAI本地化部署LLM:开源方案与实战指南
  • UE5平滑动画:Lerp与VInterpTo原理、实战与性能优化
  • Agent狂飙突进,安全“底座”为何成了企业AI落地的第一道硬门槛?