发布时间:2026/7/22 2:33:18
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/7/22 2:33:18

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

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

2026/7/22 2:33:18

C++学习之面向对象

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

2026/7/22 2:33:18

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

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

2026/7/22 9:18:57

Codex AI编程工具:核心技能与高效应用指南

1. Codex技能生态全景解析Codex作为AI辅助编程领域的标杆工具,其真正的威力往往被大多数用户低估。根据OpenAI官方数据,目前每周有超过500万活跃用户,其中40%的新增用户来自非开发岗位——这个数据揭示了Codex正在经历从"代码补全工具&q…

2026/7/22 9:18:57

SolidWorks配合关系管理与删除技巧详解

1. SolidWorks配合关系管理基础 在三维建模领域,配合关系(Mate)是定义零部件之间相对位置和运动约束的核心工具。作为SolidWorks的资深用户,我经常遇到需要清理或重建配合关系的情况。配合关系本质上是一种参数化约束,…

2026/7/22 9:18:57

Cursor AI编程工具:提升开发效率的实战解析

1. Cursor:AI编程领域的颠覆者去年夏天,我们团队接手了一个紧急项目——为某跨国企业开发定制化数据可视化平台。在连续加班两周后,团队里的资深工程师小王突然在晨会上展示了一段令人震惊的代码:他仅用3小时就完成了原本需要2天工…

2026/7/22 9:13:57

2026年AI写作论文工具排行榜:5款热门工具真实对比

"到底哪个AI写作论文工具靠谱?"这是2026年论文季被问得最多的问题。打开应用商店和搜索引擎,相关工具不下几十款,宣传话术一个比一个猛:"一键生成""包过查重""导师看不出"。可真金白银买…

2026/7/20 6:33:00

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/22 0:02:17

抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具

抓包代理链路下的 TLS 指纹变化分析:为什么调试环境会影响访问结果 摘要 在网页调试、接口联调、自动化巡检和授权采集排查中,抓包是常见手段。但很多开发者会遇到一个现象:正常访问页面时没有问题,一进入抓包或代理调试环境&…

2026/7/22 0:02:17

微信QQ聊天记录误删恢复与备份方案全指南

1. 聊天记录误删的常见场景与恢复思路作为一名长期关注数据安全的技术博主,我处理过上百起聊天记录误删的求助案例。手机误操作、系统升级失败、设备损坏是三大常见诱因。上周就遇到用户更新微信时断电,导致近两年的工作群聊记录全部消失的极端案例。不同…

2026/7/22 0:02:17

2026最新8款个人AI编程免费工具深度实测

作为一名全栈独立开发者,我最近半年一直在折腾副业项目,每个月在AI编程工具上的订阅费算下来其实也不算便宜。作为个人开发者,我们追求的就是用最少的成本获得最高效的开发体验。TRAE 基础版免费,字节跳动出品的国内首款 AI 原生 …

2026/7/21 20:02:44

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…