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

发布时间:2026/9/11 13:52:22

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/9/11 6:37:26

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

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

2026/9/10 18:57:44

C++学习之面向对象

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

2026/9/10 3:34:29

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

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

2026/9/11 13:52:04

嵌入式Linux目录操作:closedir()原理与ElfBoard实践

1. 项目概述:飞凌嵌入式ElfBoard目录操作解析 在嵌入式Linux开发中,文件系统操作是最基础却至关重要的环节。飞凌嵌入式ElfBoard作为一款广泛应用于工业控制、智能终端的ARM开发板,其目录操作接口的规范使用直接影响系统稳定性和资源管理效率…

2026/9/11 13:52:03

Drift Loss:生成模型中的随机微分方程新方法

1. 从生成模型到漂移损失:理解Drift Loss的核心思想 在生成对抗网络(GAN)和变分自编码器(VAE)主导生成模型领域的今天,一种名为"漂移损失"(Drift Loss)的新方法正在悄然改…

2026/9/11 13:52:03

服务器监控工具 Munin

穆宁 Munin 是一个用 Perl 编写的资源监控工具。 使用 RRDtool 创建图表。 版本信息 稳定版本为2.0.34,于2017年10月21日发布,可在EPEL仓库中获取。 最新的评估版本是2.99.3,于2017年1月21日发布。 在 CentOS 上,2.0.33 可以从…

2026/9/11 13:52:03

Flume事务机制解析与高可靠数据采集实践

1. 项目概述:为什么Flume事务机制值得深挖在数据采集领域,Flume作为Apache顶级项目早已成为ETL管道的标准组件。但真正让Flume在金融交易日志、电信话单等关键场景站稳脚跟的,是其独树一帜的事务设计。去年某电商大促期间,我们通过…

2026/9/11 13:52:03

自媒体账号封禁机制解析与应对策略

1. 事件背景与现象解析上周日中午,我正像往常一样登录头条号后台准备更新内容,突然发现账号无法登录。系统提示"该账号因违反平台规则已被永久封禁",这个运营了3年多、积累14.3万粉丝的账号就这样毫无征兆地被冻结了。查看最近发布…

2026/9/11 13:47:02

Domino数据库ACL权限管理与安全配置实战指南

1. Domino数据库ACL信息查看实战指南在Domino平台的管理工作中,数据库访问控制列表(ACL)的管理堪称系统安全的核心命脉。作为一位经历过多次数据泄露事故的Domino老管理员,我深刻理解快速查看和验证每个库的ACL设置的重要性。本文…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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