HarmonyOS应用开发实战:萌宠日记 - 生命周期在萌宠日记中的实践

发布时间:2026/11/2 23:14:39

HarmonyOS应用开发实战:萌宠日记 - 生命周期在萌宠日记中的实践 前言UIAbility 生命周期是 HarmonyOSStage 模型的核心概念之一它管理着应用从创建到销毁的完整过程。在萌宠日记应用中我们充分利用了 UIAbility 的各个生命周期阶段实现全局初始化、窗口管理、状态保存、资源释放等关键功能。理解 UIAbility 生命周期是掌握 HarmonyOS 应用开发的基础。本文将从萌宠日记的真实代码出发逐一解析每个生命周期方法的实际用途和最佳实践。一、UIAbility 生命周期概述1.1 生命周期全景图UIAbility 的生命周期包含以下关键阶段按执行顺序排列阶段方法触发时机典型用途创建onCreateAbility 首次创建全局初始化、数据准备窗口创建onWindowStageCreate窗口创建完毕加载主页面、设置窗口属性前后台onForeground应用切换到前台恢复资源、刷新 UI前后台onBackground应用切换到后台保存状态、释放资源窗口销毁onWindowStageDestroy窗口销毁前清理窗口资源销毁onDestroyAbility 销毁前释放全局资源1.2 萌宠日记的完整实现// EntryAbility.ets — 完整生命周期实现 import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from kit.AbilityKit; import { hilog } from kit.PerformanceAnalysisKit; import { window } from kit.ArkUI; const DOMAIN 0x0000; export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { try { this.context.getApplicationContext() .setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); } catch (err) { hilog.error(DOMAIN, testTag, Failed to set colorMode. Cause: %{public}s, JSON.stringify(err)); } hilog.info(DOMAIN, testTag, %{public}s, Ability onCreate); } onDestroy(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onDestroy); } onWindowStageCreate(windowStage: window.WindowStage): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onWindowStageCreate); windowStage.loadContent(pages/SplashPage, (err) { if (err.code) { hilog.error(DOMAIN, testTag, Failed to load the content. Cause: %{public}s, JSON.stringify(err)); return; } hilog.info(DOMAIN, testTag, Succeeded in loading the content.); }); } onWindowStageDestroy(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onWindowStageDestroy); } onForeground(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onForeground); } onBackground(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onBackground); } }提示%{public}s是 hilog 的格式化占位符表示该参数为公开信息不会在日志中隐私过滤。对于敏感数据应使用%{private}s。二、onCreate — 应用初始化2.1 方法签名与参数onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): voidonCreate接收两个关键参数want:Want对象包含启动时传入的参数信息launchParam:LaunchParam枚举标识启动原因如正常启动、冷启动、热启动等LaunchParam枚举值枚举值说明萌宠日记场景LAUNCH_STANDARD标准启动用户点击图标启动LAUNCH_COLD冷启动进程被杀死后重启LAUNCH_WARM热启动后台进程被拉起LAUNCH_NEW新实例启动多实例模式创建新实例2.2 萌宠日记的初始化逻辑在萌宠日记中onCreate方法主要完成两项初始化工作onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { try { // 1. 设置颜色模式 — 跟随系统 this.context.getApplicationContext() .setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); } catch (err) { hilog.error(DOMAIN, testTag, Failed to set colorMode. Cause: %{public}s, JSON.stringify(err)); } // 2. 记录启动日志 hilog.info(DOMAIN, testTag, %{public}s, Ability onCreate); }初始化逻辑的关键要点颜色模式设置COLOR_MODE_NOT_SET表示跟随系统设置让应用在深色/浅色模式下自动适配异常处理使用try-catch包裹确保颜色设置失败不影响应用启动日志记录使用hilog记录关键生命周期事件方便调试三、onWindowStageCreate — 窗口与页面加载3.1 窗口阶段概念onWindowStageCreate是 UIAbility 中最核心的生命周期方法之一它在窗口创建完成时被调用。此时开发者可以加载主页面内容设置窗口属性全屏、方向等订阅窗口事件初始化窗口级 UI 组件3.2 萌宠日记的页面加载实现onWindowStageCreate(windowStage: window.WindowStage): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onWindowStageCreate); windowStage.loadContent(pages/SplashPage, (err) { if (err.code) { hilog.error(DOMAIN, testTag, Failed to load the content. Cause: %{public}s, JSON.stringify(err)); return; } hilog.info(DOMAIN, testTag, Succeeded in loading the content.); }); }loadContent方法详解参数类型说明萌宠日记值pathstring页面路径pages/SplashPagecallbackAsyncCallbackvoid加载完成回调日志记录成功/失败3.3 为什么从 SplashPage 开始萌宠日记选择闪屏页作为首个加载页面而非直接进入主页理由如下品牌展示在 SplashPage 展示应用 Logo 和品牌标语“记录爱·陪伴成长”加载缓冲为后续数据加载争取时间避免白屏用户体验平滑过渡到主界面提升首次启动体验SplashPage 的完整实现// SplashPage.ets Entry Component struct SplashPage { build() { Column() { // 应用 Logo 和标题 Row({ space: 12 }) { Text().fontSize(48) Text(萌宠日记).fontSize(36).fontWeight(FontWeight.Bold).fontColor(#333333) } Text(记录爱·陪伴成长).fontSize(16).fontColor(#F5A623).margin({ top: 8 }) // 宠物插画占位 Column() { Text().fontSize(80) } .width(200).height(200).backgroundColor(#FFF3E0).borderRadius(100) // 开始按钮 Button(开始记录) .width(70%).height(48).fontSize(18).fontColor(Color.White) .backgroundColor(#F5A623).borderRadius(24) .onClick(() { router.pushUrl({ url: pages/Index }) }) } .width(100%).height(100%).backgroundColor(#FFF8F0) } }四、onForeground — 前台恢复4.1 触发场景onForeground在以下场景被触发应用首次启动窗口创建完成后应用从后台切换回前台应用被系统从挂起状态唤醒4.2 萌宠日记的前台处理onForeground(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onForeground); }在萌宠日记的当前版本中onForeground仅记录日志。但在实际生产环境中这里可以扩展如下// 扩展后的前台处理示例 onForeground(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onForeground); // 1. 刷新首页数据 — 重新拉取宠物状态 // 2. 检查提醒事项 — 弹窗展示到期待办 // 3. 恢复动画 — 暂停的动画重新播放 // 4. 更新在线状态 — 向服务器发送在线信号 }五、onBackground — 后台挂起5.1 触发场景onBackground在应用切换至后台时触发是保存状态的最佳时机。5.2 萌宠日记的后台处理onBackground(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onBackground); }扩展的后台处理逻辑有序列表 — 后台处理优先级保存草稿将未完成的日记内容持久化到 Preferences暂停动画停止不必要的动画和定时器节省电量释放内存清理图片缓存、临时数据记录时间戳记录进入后台的时间用于前台时计算“离开多久“六、onWindowStageDestroy 与 onDestroy — 资源清理6.1 窗口销毁onWindowStageDestroy(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onWindowStageDestroy); // 释放窗口资源取消窗口事件订阅、释放窗口级渲染资源 }6.2 Ability 销毁onDestroy(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onDestroy); // 释放全局资源关闭数据库连接、取消全局事件监听 }七、生命周期状态流转图生命周期流转的核心规则应用启动onCreate→onWindowStageCreate→onForeground切到后台onBackground切回前台onForeground注意不会重新走 onCreate应用退出onBackground→onWindowStageDestroy→onDestroy八、生命周期在调试中的应用8.1 日志查看方法萌宠日记使用hilog记录生命周期日志可通过以下命令查看# 查看应用生命周期日志 hilog -D 0x0000 -T testTag # 过滤特定标签 hilog -D 0x0000 -T testTag | grep -E onCreate|onDestroy|onForeground|onBackground8.2 日志级别说明级别方法用途是否隐私INFOhilog.info正常流程记录公开%{public}sERRORhilog.error异常情况记录公开%{public}sDEBUGhilog.debug调试信息可私有九、生命周期与 UI 数据同步9.1 数据同步策略UIAbility 与 UI 页面的数据同步遵循以下原则// 在 UIAbility 中更新数据 class EntryAbility extends UIAbility { private appData: Mapstring, Object new Map() onCreate(): void { // 初始化全局数据 this.appData.set(initTime, Date.now()) } onForeground(): void { // 刷新数据时通过 EventHub 通知 UI this.context.eventHub.on(dataUpdate, (data: Object) { // 处理数据更新 }) } }9.2 萌宠日记的数据同步场景在萌宠日记应用中以下场景需要生命周期与 UI 同步应用从后台切回前台 → 刷新首页的今日记录应用启动完成 → 加载宠物档案数据应用进入后台 → 自动保存日记草稿应用被销毁 → 保存用户偏好设置十、启动模式对生命周期的影响10.1 三种启动模式启动模式配置方式生命周期行为适用场景singleton默认单实例复用已有 Ability萌宠日记默认standard配置指定每次启动创建新实例多任务场景multiton配置指定指定标识创建新实例文档编辑10.2 萌宠日记的启动模式配置{ abilities: [ { name: EntryAbility, srcEntry: ./ets/entryability/EntryAbility.ets, launchType: singleton, exported: true, skills: [ { entities: [entity.system.home], actions: [ohos.want.action.home] } ] } ] }萌宠日记选择singleton模式的原因应用只需要一个主界面实例避免多个实例导致的数据冲突节省系统资源降低内存占用符合移动端应用的常规使用习惯总结本文从萌宠日记的真实代码出发详细解析了UIAbility 生命周期的六个核心阶段onCreate、onWindowStageCreate、onForeground、onBackground、onWindowStageDestroy、onDestroy。每个阶段都有其特定的用途onCreate全局初始化设置颜色模式onWindowStageCreate加载 SplashPage 首屏onForeground前台恢复准备onBackground后台挂起处理onWindowStageDestroy窗口资源清理onDestroy全局资源释放理解这些生命周期方法能帮助你写出更健壮、更高效的 HarmonyOS 应用。下一篇我们将深入应用启动流程与闪屏页面设计分析 SplashPage 的布局技巧和交互优化。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源UIAbility 组件概述https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/uiability-overviewUIAbility 生命周期https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/uiability-lifecycleUIAbility 启动模式https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/uiability-launch-typeStage 模型开发概述https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/stage-model-development-overviewhilog 日志开发指导https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hilog-guidelineswindow 窗口管理https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/window-overviewWant 信息传递载体https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/want-overviewUIAbility 与 UI 数据同步https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/uiability-data-sync-with-ui
延伸阅读

更多相关文章

2026/11/3 8:19:49

如何快速掌握Docker容器管理:5个简单技巧提升容器管理效率

如何快速掌握Docker容器管理:5个简单技巧提升容器管理效率 【免费下载链接】dpanel 轻量化 docker 可视化管理面板。lightweight panel for docker 项目地址: https://gitcode.com/gh_mirrors/dp/dpanel Dpanel是一款专为新手设计的轻量化Docker可视化管理面…

2026/10/30 5:15:49

C++学习之面向对象

很多初学C的朋友都会有一个困惑:C语言面向过程写得好好的,为什么C要引入面向对象?面向对象到底解决了什么问题?日常编码中该怎么用?作为C的核心编程思想,面向对象不是花哨的语法糖,而是一套解决…

2026/11/1 16:29:17

Svelto.ECS入门:Unity数据驱动架构实战与性能优化

1. 项目概述:为什么选择Svelto.ECS?如果你正在Unity或者Godot这类游戏引擎里摸爬滚打,尤其是在做性能要求苛刻的项目,比如开放世界、MOBA或者大规模策略游戏,那你肯定对“ECS架构”这个词不陌生。Unity推出了自己的DOT…

2026/11/3 18:57:13

UVa 792 Program Modules

题目描述 给定一个程序中的所有函数及其直接调用关系,定义关系 A→BA \rightarrow BA→B 表示函数 AAA 直接调用 BBB,A⇒BA \Rightarrow BA⇒B 表示 AAA 可传递地调用 BBB(直接或间接)。已知 →\rightarrow→ 是 ⇒\Rightarrow⇒ …

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑