回复
     鸿蒙Next UIAbility组件和page页面生命周期总结 原创
auhgnixgnahz
 发布于 2025-7-20 15:19
 浏览
 0收藏

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

| 回调函数 | 回调时机 | 使用 | 
|---|---|---|
| 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装饰的组件(页面)生命周期示意图如下所示

| 回调函数 | 回调时机 | 使用 | 
|---|---|---|
| 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()
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
  标签 
   
        赞
        
 
        收藏 
      
 回复
  相关推荐
 



















