公司动态
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