在开始之前,我们先明确自定义组件和页面的关系:
-
自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。
-
页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。
页面生命周期,即被@Entry装饰的组件生命周期,提供以下生命周期接口:
-
onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。
-
onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。
-
onBackPress:当用户点击返回按钮时触发。
组件生命周期,即一般用@Component装饰的自定义组件的生命周期,提供以下生命周期接口:
-
aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。
-
onDidBuild:组件build()函数执行完成之后回调该接口,不建议在onDidBuild函数中更改状态变量、使用animateTo等功能,这可能会导致不稳定的UI表现。
-
aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。
-
@Entry装饰的组件(页面)生命周期流程图
应用级生命周期
应用级生命周期主要包括以下几个阶段:
- onCreate:应用创建时调用。
- onDestroy:应用销毁时调用。
- onWindowStageCreate:WindowStage创建时调用。
- onWindowStageDestroy:WindowStage销毁时调用。
- onForeground:应用进入前台时调用。
- onBackground:应用进入后台时调用1。
页面级生命周期
页面级生命周期主要包括以下几个阶段:
- aboutToAppear:页面创建时调用。
- aboutToDisappear:页面销毁时调用。
- onPageShow:页面准备展示时调用。
- onPageHide:页面完全隐藏时调用。
- onBackPress:用户返回操作时调用1。
组件生命周期
组件的生命周期包括以下几个状态:
- Create:组件创建时调用。
- Foreground:组件进入前台时调用。
- Background:组件进入后台时调用。
- Destroy:组件销毁时调用2。
具体执行顺序示例
以一个简单的页面切换为例,生命周期的执行顺序如下:
- aboutToAppear():页面创建时调用。
- onWillAppear():页面即将出现时调用。
- onAppear():页面出现时调用。
- onWillHide():页面即将隐藏时调用。
- onHide():页面隐藏时调用。
- onWillDisAppear():页面即将消失时调用。
- onDisAppear():页面消失时调用。