HarmonyOS 应用开发学习笔记 ets组件生命周期

HarmoryOS Ability页面的生命周期
@Component自定义组件
ets组件生命周期官放文档

本文讲解 ets组件的生命周期,在此之前大家可以先去了解Ability的生命周期,这两个生命周期有有一定的关联性

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

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

组件定义:@Entry 、 @Component

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

方法名 描述
onPageShow 页面每次显示时触发。
onPageHide 页面每次隐藏时触发一次。
onBackPress 当用户点击返回按钮时触发。

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

方法名 描述
aboutToAppear 组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。
aboutToDisappear 在自定义组件即将析构销毁时执行。

生命周期流程如下图所示,下图展示的是被@Entry装饰的组件(首页)生命周期。

代码示例:

复制代码
import { ComponentA } from './ComponentA'

@Entry
@Component
struct Index {

  @State message: string = '工欲善其事,必先利其器'
  @State message2: string = ''
  @State message3: string = '拥抱时代'
  @State message4: string = '点11击事件'
  @State message5: number = 2

  // 只有被@Entry装饰的组件才可以调用页面的生命周期
  onPageShow() {
    console.info('muzi102 Index onPageShow');
  }
  // 只有被@Entry装饰的组件才可以调用页面的生命周期
  onPageHide() {
    console.info('muzi102 Index onPageHide');
  }
  
  // 只有被@Entry装饰的组件才可以调用页面的生命周期
  onBackPress() {
    console.info('muzi102 Index onBackPress');
  }

  // 组件生命周期
  aboutToAppear() {
    console.info('muzi102 MyComponent aboutToAppear');
  }

  // 组件生命周期
  aboutToDisappear() {
    console.info('muzi102 MyComponent aboutToDisappear');
  }

  build() {
    Row() {
      Column() {
        //引入组件ComponentA
        ComponentA({ msg: this.message3 })

        Divider().padding(10)
        //引入组件ComponentA
        // ComponentA({ msg: this.message })
      }.padding(20)
    }
  }
}

启动后:

先调用组件的 aboutToAppear(),再调用 onPageShow() (如果被@Entry修饰)

事件 触发流程
点击返回按钮 触发页面生命周期Index onBackPress,且触发返回一个页面后会导致当前Index页面被销毁。
最小化应用或者应用进入后台 触发Index onPageHide。当前Index页面没有被销毁,所以并不会执行组件的aboutToDisappear。应用回到前台,执行Index onPageShow。
退出应用 执行Index onPageHide --> MyComponent aboutToDisappear --> Child aboutToDisappear。

最后:

官网文档里有一句话:
一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期

经木子测,自定义组件用@Entry修饰了不能触发(onPageShow、onPageHide、onBackPress )回调

即:

  • index.ets 组件(入口组件) 能触发 onPageShow、onPageHide、onBackPress、aboutToAppear、aboutToDisappear

  • 自定义组件ComponentA 仅能触发(aboutToAppear、aboutToDisappear)

相关推荐
@小匠5 小时前
Read Frog:一款开源的 AI 驱动浏览器语言学习扩展
人工智能·学习
见山是山-见水是水6 小时前
鸿蒙flutter第三方库适配 - 读书笔记
flutter·华为·harmonyos
Utopia^7 小时前
鸿蒙flutter第三方库适配 - 图片压缩工具
flutter·华为·harmonyos
SoraLuna8 小时前
「鸿蒙智能体实战记录 11」年俗文化展示卡片开发与多段内容结构化呈现实现
华为·harmonyos
Ww.xh8 小时前
OpenHarmony API8升API9:权限与接口变更实战指南
harmonyos
梁山好汉(Ls_man)9 小时前
鸿蒙_自定义组件包含多个引用自定义构建函数@BuilderParam时的用法
华为·harmonyos·鸿蒙·arkui
见山是山-见水是水10 小时前
鸿蒙flutter第三方库适配 - 车辆管理
flutter·华为·harmonyos
炽烈小老头11 小时前
【 每天学习一点算法 2026/04/12】x 的平方根
学习·算法
Utopia^11 小时前
鸿蒙flutter第三方库适配 - 番茄钟专注
flutter·华为·harmonyos
阿杰学AI11 小时前
AI核心知识115—大语言模型之 自监督学习(简洁且通俗易懂版)
人工智能·学习·ai·语言模型·aigc·监督学习·自监督学习