鸿蒙Next UIAbility组件和page页面生命周期总结 原创

auhgnixgnahz
发布于 2025-7-20 15:19
浏览
0收藏

鸿蒙Next UIAbility组件和page页面生命周期总结-鸿蒙开发者社区

UIAbility的生命周期示意图如下所示

鸿蒙Next UIAbility组件和page页面生命周期总结-鸿蒙开发者社区

回调函数 回调时机 使用
onCreate() 在首次创建UIAbility实例时触发,仅执行一次 在该回调中执行UIAbility整个生命周期中仅发生一次的启动逻辑
onWindowStageCreate() UIAbility实例创建完成之后,在进入前台之前执行 在该回调中进行UI加载、WindowStage的事件订阅
onForeground() UIAbility实例进入前台状态 在该回调中申请系统需要的资源
onBackground() UIAbility实例切换至后台状态 在该回调中释放UI不可见时的无用资源
onWindowStageWillDestroy() 在UIAbility实例销毁之前,当WindowStage即将销毁时 在该回调用释放通过WindowStage获取的资源、注销WindowStage事件订阅
onWindowStageDestroy() 仅当UIAbility正常退出时会触发该回调,异常退出场景(例如低内存查杀)不会触发 在该回调中释放UI资源,此时WindowStage不可以使用
onDestroy() 仅当UIAbility正常退出时会触发该回调,异常退出场景(例如低内存查杀)不会触发 在该回调中进行系统资源的释放、数据的保存等操作
onNewWant() 当应用的UIAbility实例已创建,再次调用方法启动该UIAbility实例时 在该回调中更新要加载的资源和数据等,用于后续的UI展示

被@Entry装饰的组件(页面)生命周期示意图如下所示

鸿蒙Next UIAbility组件和page页面生命周期总结-鸿蒙开发者社区

回调函数 回调时机 使用
aboutToAppear 在创建自定义组件的新实例后,在执行其build()函数之前执行 执行当前节点组件的初始化逻辑,避免高耗时操作阻塞主线程,可以采用多线程处理该任务,通过并发的方式避免主线程阻塞
onDidBuild 在组件首次渲染触发的build函数执行完成之后回调 可以在这个阶段进行埋点数据上报等不影响实际UI的功能。不建议在onDidBuild函数中更改状态变量、使用animateTo等功能,这可能会导致不稳定的UI表现
aboutToDisappear 在自定义组件析构销毁之前执行 不允许在aboutToDisappear函数中改变状态变量
onPageShow router路由页面(仅@Entry装饰的自定义组件)每次显示时触发一次 页面加载完成可见
onPageHide router路由页面(仅@Entry装饰的自定义组件)每次隐藏时触发一次 避免执行高耗时操作阻塞主线程造成卡顿。对于高耗时操作例如相机资源释放,推荐使用异步方案替代
onBackPress 当用户点击返回按钮时触发(仅router路由页面生效) 返回true表示页面自己处理返回逻辑,不进行页面路由;返回false表示使用默认的路由返回逻辑,不设置返回值按照false处理

生命周期函数回调演示:

1.冷启动,点击桌面应用,执行过程

=========EntryAbility: onCreate()
=========EntryAbility: onWindowStageCreate()
=========EntryAbility: onForeground()
=========Component: aboutToAppear()
=========Component: onDidBuild()
=========ChildComponent: aboutToAppear()
=========ChildComponent: onDidBuild()
=========Component: onPageShow()

2.按返回键回到桌面

=========Component: onBackPress()
=========EntryAbility: onBackground()
=========Component: onPageHide()

3.热启动,点击桌面应用

=========EntryAbility: onNewWant()
=========Component: onPageShow()
=========EntryAbility: onForeground()

4.杀死进程

=========EntryAbility: onBackground()
=========Component: onPageHide()
=========EntryAbility: onWindowStageWillDestroy()
=========Component: aboutToDisappear()
=========ChildComponent: aboutToDisappear()
=========EntryAbility: onWindowStageDestroy()
=========EntryAbility: onDestroy()

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
收藏
回复
举报
回复
    相关推荐