鸿蒙面试题 -生命周期的执行顺序

在开始之前,我们先明确自定义组件和页面的关系:

  • 自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。

  • 页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。

页面生命周期,即被@Entry装饰的组件生命周期,提供以下生命周期接口:

  • onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。

  • onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。

  • onBackPress:当用户点击返回按钮时触发。

组件生命周期,即一般用@Component装饰的自定义组件的生命周期,提供以下生命周期接口:

  • aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。

  • onDidBuild:组件build()函数执行完成之后回调该接口,不建议在onDidBuild函数中更改状态变量、使用animateTo等功能,这可能会导致不稳定的UI表现。

  • aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。

  • @Entry装饰的组件(页面)生命周期流程图

应用级生命周期

应用级生命周期主要包括以下几个阶段:

  1. ‌onCreate‌:应用创建时调用。
  2. ‌onDestroy‌:应用销毁时调用。
  3. ‌onWindowStageCreate ‌:WindowStage创建时调用。
  4. ‌onWindowStageDestroy‌:WindowStage销毁时调用。
  5. ‌onForeground‌:应用进入前台时调用。
  6. ‌onBackground‌:应用进入后台时调用‌1。

页面级生命周期

页面级生命周期主要包括以下几个阶段:

  1. ‌aboutToAppear‌:页面创建时调用。
  2. ‌aboutToDisappear‌:页面销毁时调用。
  3. ‌onPageShow‌:页面准备展示时调用。
  4. ‌onPageHide‌:页面完全隐藏时调用。
  5. ‌onBackPress‌:用户返回操作时调用‌1。

组件生命周期

组件的生命周期包括以下几个状态:

  1. ‌Create‌:组件创建时调用。
  2. ‌Foreground‌:组件进入前台时调用。
  3. ‌Background‌:组件进入后台时调用。
  4. ‌Destroy‌:组件销毁时调用‌2。

具体执行顺序示例

以一个简单的页面切换为例,生命周期的执行顺序如下:

  1. ‌**aboutToAppear()**‌:页面创建时调用。
  2. ‌**onWillAppear()**‌:页面即将出现时调用。
  3. ‌**onAppear()**‌:页面出现时调用。
  4. ‌**onWillHide()**‌:页面即将隐藏时调用。
  5. ‌**onHide()**‌:页面隐藏时调用。
  6. ‌**onWillDisAppear()**‌:页面即将消失时调用。
  7. ‌**onDisAppear()**‌:页面消失时调用‌。
相关推荐
2301_7807896618 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
第九序言T18 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
学长毕设19 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn19 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川20 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵20 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
程序喵大人20 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
秋天的怀念_David20 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas10020 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin21 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php