鸿蒙相关的生命周期都有哪些?

626 阅读3分钟

总结:鸿蒙相关的生命周期都有哪些?

在鸿蒙应用程序启动时,会经历一系列的生命周期,首先是UIAbility,再到页面的生命周期,最后到组件加载的生命周期。下面我分别总结了Ability、页面、组件各自的生命周期:

UIAbility生命周期:onCreate、onWindowStageCreate、onForeground、onBackground、onWindowStageDestroy、onDestroy。
  • onCreate:Create状态为在应用加载过程中,UIAbility实例创建完成时触发,系统会调用onCreate()回调。可以在该回调中进行页面初始化操作,例如变量定义资源加载等,用于后续的UI展示。

  • onWindowStageCreate():UIAbility实例创建完成之后,在进入Foreground之前,系统会创建一个WindowStage。WindowStage创建完成后会进入onWindowStageCreate()回调,可以在该回调中设置UI加载、设置WindowStage的事件订阅。

image-20240511145824101.png

  • onForegound():在UIAbility的UI可见之前,如UIAbility切换至前台时触发。可以在onForeground()回调中申请系统需要的资源,或者重新申请在onBackground()中释放的资源。

  • onWindowStageDestory():在UIAbility实例销毁之前,则会先进入onWindowStageDestroy()回调,可以在该回调中释放UI资源。

  • onBackground():在UIAbility的UI完全不可见之后,如UIAbility切换至后台时候触发。可以在onBackground()回调中释放UI不可见时无用的资源,或者在此回调中执行较为耗时的操作,例如状态保存等。

  • onWindowStageDestory():在UIAbility实例销毁之前,则会先进入onWindowStageDestroy()回调,可以在该回调中释放UI资源。

  • onDestroy():Destroy状态在UIAbility实例销毁时触发。可以在onDestroy()回调中进行系统资源的释放、数据的保存等操作。

页面生命周期:onPageShow、onPageHide、onBackPress。
  • 页面生命周期,说白了就是@Entry修饰的组件,才称之为页面。

  • onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件生效。

  • onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景,仅@Entry装饰的自定义组件生效。

  • onBackPress:当用户点击返回按钮时触发,仅@Entry装饰的自定义组件生效。

组件生命周期:aboutToAppear、aboutToDisappear。
  • aboutToAppear:在创建自定义组件的新实例后,在执行其build()函数之前执行。允许在aboutToAppear函数中改变状态变量,更改将在后续执行build()函数中生效。
  • aboutToDisappear:函数在自定义组件销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。

按返回键页面执行生命周期方法:

  • 打开第一个页面:
    • Index:aboutToAppear
    • Index:onPageShow
  • 跳转第二个页面:
    • Index:onPageHide
    • Second:aboutToAppear
    • Second:onPageShow
  • 点击back: 如果是在第二个页面跳转到第一个页面:
    • Second:onBackPress Second:onPageHide
    • Second:onPageHide Index:aboutToAppear
    • Index:onPageShow Index:onPageShow
    • Second:aboutToDisappear

返回页面不走aboutToAppear:

  • aboutToAppear函数在创建自定义组件的新实例后,在执行其build()函数之前执行。
  • 返回页面时==不需要走重新创建==,不会执行aboutToAppear,只会执行onPageShow。

微信图片_20240523194936.png aboutToAppear和onAppear的区别?

  • aboutToAppear:是组件的生命周期方法,当组件实例创建后,执行build函数之前执行aboutToAppear

  • onAppear:是组件的属性方法,在该组件显示时触发此回调

    Text()
    .onAppear(()=>{}