HarmonyOS生命周期 原创

liuyang8888
发布于 2025-3-23 11:31
浏览
0收藏

1.  组件-生命周期

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

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

带@Entry修饰符的组件:

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

(1)​onPageShow​:页面每次显示时触发。

(2)​onPageHide​:页面每次隐藏时触发一次。

(3)​onBackPress​:当用户点击返回按钮时触发。

自定义组件生命周期:

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

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

(2)​aboutToDisappear​:在自定义组件即将析构销毁时执行。

因为@Entry 也是@Component组件,所以页面组件同时拥有自定义组件的生命周期。

HarmonyOS生命周期-鸿蒙开发者社区

在Index.ets文件中测试一下,代码如下:

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  aboutToAppear() {
    console.log("页面初始化")
  }
  onPageShow() {
    console.log("页面显示")
  }
  onPageHide() {
    console.log("页面隐藏")
  }
  aboutToDisAppear() {
    // 清理定时器
    console.log("页面销毁")
  }
  onBackPress() {
    console.log("后退键")
  }

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize($r('app.float.page_text_font_size'))
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          this.message = 'Welcome';
        })
    }
    .height('100%')
    .width('100%')
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.


实现效果,如图所示。

HarmonyOS生命周期-鸿蒙开发者社区

带@Entry的页面组件:拥有页面进入,页面销毁,页面显示,页面隐藏,页面返回的生命周期。

@Component自定义组件:拥有组件进入、组件销毁生命周期。

2.  UIAbility-生命周期

UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态,如图所示。

HarmonyOS生命周期-鸿蒙开发者社区

(1)onCreate:Ability创建时回调,执行初始化业务逻辑操作。

(2)onDestory:Ability生命周期回调,在销毁时回调,执行资源清理等操作。

(3)onWindowStageCreate:当WindowStage创建后调用。

(3)onWindowStageDestory:当WindowStage销毁后调用。

(4)onForeground:Ability生命周期回调,当应用从后台转到前台时触发。

(5)onBackground:Ability生命周期回调,当应用从前台转到后台时触发

UIAbility相当于我们应用中的一个任务,我们可以把自己的app想象成一个UIAbility,但是当项目越来越大,需要扩展和分担业务的时候,可以采取多个。

3.  Ability跳转

Stage模型:

· 模块

· UIAbility- 项目中默认有一个- 任务窗口-绘制页面

· Page

· Component

UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口;一个UIAbility组件中可以通过多个页面来实现一个功能模块;每一个UIAbility组件实例,都对应于一个最近任务列表中的任务。

当我们项目中拆解多个任务的时候,可以通过新建多个Ability的方式来进行任务的拆解。

比如,我们支付的之后想新开一个任务去专门处理这件事,就可以采用拉起一个新的Ability来实现。

新建一个支付Ablility – PayAbility,如图所示。

HarmonyOS生命周期-鸿蒙开发者社区

HarmonyOS生命周期-鸿蒙开发者社区

新建PayAbility对应的跳转的支付页面 PayIndex.ets。

@Entry
@Component
struct PayIndex {

  build() {
    Row() {
      Column({ space: 15 }) {
        Text("支付Ability")
          .fontSize(40)
          .fontColor(Color.Red)
        Button("支付")
          .width('100%')
      }
    }
    .height('100%')
    .padding(20)
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.


实现效果,如图所示。

HarmonyOS生命周期-鸿蒙开发者社区

新建一个主页Page- MainPage用来跳转到支付Ability。

@Entry
@Component
struct MainPage {

  build() {
    Row() {
      Column({ space: 15 }){
        Text("主Ability")
          .fontSize(50)
        Button("去支付")
          .width('100%')
      }
    }
    .height('100%')
    .padding(20)
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

实现效果,如图所示。

HarmonyOS生命周期-鸿蒙开发者社区

ability的拉起必须通过模拟器-所以把我们主Ability的启动页设置为我们刚刚新建的主页。

修改EntryAbility.ets文件。

HarmonyOS生命周期-鸿蒙开发者社区

修改PayAbility.ets文件。

HarmonyOS生命周期-鸿蒙开发者社区

接下来,我们点击去支付按钮的时候要拉起支付PayAbility。

我们采用当前Ability的上下文来实现,参考官方文档。

HarmonyOS生命周期-鸿蒙开发者社区

使用Context上下文拉起Ability。

这里我们需要准备一个参数​Want​。

let want: Want = {
      'deviceId': '', // deviceId为空表示本设备
      'bundleName': '包名',
      'abilityName': 'abilityName'
  };
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

拉起Ability,修改MainPage.ets文件,代码如下:

import { common, Want } from '@kit.AbilityKit'
@Entry
@Component
struct MainPage {

  build() {
    Row() {
      Column({ space: 15 }){
        Text("主Ability")
          .fontSize(50)
        Button("去支付")
          .width('100%')
          .onClick(async () => {
            try {
              let want: Want = {
                'deviceId': '', // deviceId为空表示本设备
                'bundleName': 'com.xunfang.myapplication',
                'abilityName': 'PayAbility'
              };
              await (getContext(this) as common.UIAbilityContext).startAbility(want)
            }catch(error) {

            }
          })
      }
    }
    .height('100%')
    .padding(20)
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

实现效果,如图所示。

HarmonyOS生命周期-鸿蒙开发者社区

->

HarmonyOS生命周期-鸿蒙开发者社区

此时是2个Ability页面。

HarmonyOS生命周期-鸿蒙开发者社区

    这里点击“去支付”(MainPage.ets),拉起另一个Ability页面(PayIndex.ets)。

 

 

 

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
MyApplication_Life.rar 1.1M 0次下载
收藏
回复
举报
回复
    相关推荐