[HarmonyOS][K老师]鸿蒙 UIAbility 生命周期详解。
原创
10986 浏览 304 点赞 0 收藏
UIAbility 生命周期核心机制
1. 冷启动:onCreate
- 触发时机:首次启动应用
- 关键操作:初始化全局资源(数据库、配置等)处理卡片跳转参数onCreate(want: Want) { // 从卡片获取商品ID if (want.parameters?.cardId) { const goodsId = want.parameters.cardId; router.pushUrl(`pages/GoodsDetail?id=${goodsId}`); } }
- 避坑重点:必须使用 this.context 获取应用上下文(getContext() 此时无效)
2. 热启动:onNewWant
- 触发时机:应用已运行时接收新意图
- 典型场景:从通知栏跳转指定页面通过深链接打开特定模块onNewWant(want: Want) { // 跳转商品分类页 if (want.parameters?.category) { router.replaceUrl(`pages/Category/${want.parameters.category}`); } }
3. 窗口创建:onWindowStageCreate
- 核心任务:onWindowStageCreate(windowStage: window.WindowStage) { // 1. 获取设备尺寸(响应式布局) const { width, height } = windowStage.getMainWindowSync().getWindowProperties(); GlobalLayoutConfig.init(width); // 2. 加载UI内容(必须调用!) windowStage.loadContent('pages/HomePage'); }
- 扩展能力:动态适配折叠屏/平板多窗口模式注册窗口事件监听器
4. 窗口销毁:onWindowStageDestroy
- 资源释放:移除窗口事件监听清理临时渲染资源释放占用内存的缓存数据onWindowStageDestroy() { this.videoPlayer.release(); // 释放视频资源 this.tempCache.clear(); // 清理临时缓存 }
5. 前后台切换
| 阶段 | 触发场景 | 关键操作 |
|---|---|---|
| onForeground | 应用回到前台 | 恢复动画/定时器/传感器监听 |
| onBackground | 应用退到后台 | 暂停高耗能操作,保存临时状态 |
示例场景:
// 回到前台时刷新数据
onForeground() {
this.refreshGoodsStock();
this.startBannerAnimation();
}
// 退到后台时释放资源
onBackground() {
this.stopBannerAnimation();
this.saveScrollPosition();
}关键陷阱与解决方案
1. 上下文获取时机问题
// 错误示例(崩溃风险)
onCreate() {
const ctx = getContext(); // UI未初始化,返回null
fileIO.write(ctx, 'data.txt');
}
// 正确方案(所有阶段通用)
onCreate() {
// 直接使用Ability内置上下文
fileIO.write(this.context, 'data.txt');
}2. 多窗口资源冲突
- 问题:平板分屏时多个窗口共享同一Ability
- 方案:窗口级资源隔离onWindowStageCreate(windowStage) { // 为每个窗口创建独立资源 this.windowResourceMap.set(windowStage, new WindowResource()); }
卡片能力生命周期关联
FormExtensionAbility 核心阶段:
- onAddForm:卡片创建时初始化(使用 this.context 写入文件)
- onFormVisible:卡片显示时刷新数据
- onFormInvisible:卡片隐藏时暂停更新
- onRemoveForm:卡片移除时销毁资源
设计原则:UIAbility 管理全局状态,FormExtensionAbility 处理卡片专属逻辑
生命周期最佳实践
- 冷热分离onCreate 仅初始化必要全局单例onNewWant 处理场景化跳转逻辑
- 窗口资源绑定private windowResources = new Map<window.WindowStage, Resource>(); onWindowStageCreate(stage) { this.windowResources.set(stage, initResource()); } onWindowStageDestroy(stage) { this.windowResources.get(stage)?.release(); }
- 状态切换优化前台恢复:优先核心功能(如网络重连)后台释放:按内存占用排序清理
©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
HarmonyOS
标签
HarmonyOS
生命周期
K老师
UIAbility生命周期
暂无评论数据
发布
相关推荐
以技术破局,以生态赋能|IAM亮相鸿蒙智选峰会,X5Ultra引领智家健康新趋势
云上修代码
2171
0鸿蒙智选720智能空气净化器铂境Pro Max亮相鸿蒙峰会 以硬核科技定义智慧健康新标杆
快乐编译者
1168
0华为全场景亮相AWE 2026:华为鸿蒙智家 智慧全生态重塑未来家
2030
0华为鸿蒙智家技术升级,多款新品亮相AWE2026
老李的控制台
1202
0微信鸿蒙版 App 扫码登录手表端要求公布,手机系统需升级至 HarmonyOS 6.0.0.130 及以上版本
1361
0K老师
大家好我是K老师,这是我的个人介绍:鸿蒙先锋,鸿蒙开发者达人,鸿蒙应用架构师,HDG组织者,可0-1开发纯血鸿蒙应用,可0-1开发前端加鸿蒙混合应用,可0-1开发PC端鸿蒙应用。
118
帖子
0
提问
1412
粉丝
最新发布
[HarmonyOS][K老师]鸿蒙中主线程与子线程通信机制详解,Emitter,Worker,EventHandler和EventRunner。
2026-01-28 11:31:47 发布[HarmonyOS][K老师]鸿蒙大文件上传方案。
2026-01-28 10:30:53 发布热门推荐