【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 )



在这里插入图片描述


参考文档 : <HarmonyOS第一课>ArkTS开发语言介绍





一、ArkTS @Component 自定义组件生命周期




1、自定义组件生命周期


ArkTS 的 @Component 自定义组件 生命周期 从创建 到 销毁的全过程 , 如下图所示 :

在这里插入图片描述

  • 首先 , 创建 自定义组件 ;
  • 然后 , 在将要显示到页面上时 , 回调 自定义组件 的 aboutToAppear() 函数 ;
  • 再后 , 显示完毕将要在页面上消失时 , 回调 自定义组件 的 aboutToDisappear() 函数 ;
  • 最后 , 销毁 自定义组件 ;

2、aboutToAppear 函数执行时机和作用


aboutToAppear() 函数 在 创建自定义组件 之后 , 在 build() 声明 UI 函数 之前执行 ;

aboutToAppear() 函数 中 通常 用于 初始化 将要在 UI 中展示的数据 , 或 申请 系统资源 , 在后续执行的 build 函数中 , 使用 初始化的数据 或 申请的系统资源 ;


3、aboutToDisappear 函数执行时机和作用


aboutToDisappear() 函数 在 build() 声明 UI 函数 之后 , 在 自定义组件销毁 之前 , 进行调用 ;

aboutToAppear() 函数 中 通常 用于 销毁 在 UI 中展示的数据 , 或 释放不再申请的 系统资源 ;


4、代码示例


在自定义组件 MyComponent 中 , 重写 aboutToAppear 和 aboutToDisappear 函数 , 然后在页面中使用该自定义组件 ;

import hilog from '@ohos.hilog'

@Component
export struct MyComponent {

  // 创建后 , build 之前回调
  aboutToAppear(){
    console.log("aboutToAppear")
  }

  // 自定义子组件
  build() {
    Column({ space: 20 }) { // 设置子组件间距为10

      Text('Text1')
        .fontSize(20)
        .backgroundColor(Color.Green)

      Text('Text2')
        .fontSize(20)
        .backgroundColor(Color.Yellow)

      Text('Text3')
        .fontSize(20)
        .backgroundColor(Color.Gray)

    }
    .width('50%') // 设置 Row 的宽度
    .height('50%') // 设置 Row 的高度
    .backgroundColor(Color.Pink)
    .alignItems(HorizontalAlign.Center) // 水平居中
    .justifyContent(FlexAlign.Center) // 垂直居中
  }

  // build 之后 , 销毁前回调
  aboutToDisappear() {
    console.log("aboutToDisappear")
  }
}

在页面中 , 使用该自定义组件 :

// 导入外部自定义子组件
import {MyComponent} from '../view/MyComponent';

@Entry
@Component
struct Example {
  build() {
    // 必须使用布局组件包括子组件
    Column(){
      // 自定义子组件
      MyComponent();
    }
  }
}

运行效果 :

在这里插入图片描述

上述代码在本博客资源中可以下载 ;





二、ArkTS @Entry 页面生命周期




1、@Entry 页面生命周期


使用 @Entry 修饰自定义组件 , 就是将该自定义组件设置为 默认页面入口 ;

页面入口组件 , 会在 自定义组件 的 生命周期回调函数

  • aboutToAppear() 函数 : 自定义组件创建后 , 调用 build 函数之前 , 回调该函数 ;
  • aboutToDisappear() 函数 : 自定义组件 调用 build 函数显示 之后 , 销毁之前 , 回调该函数 ;

的 基础上 , 额外提供了另外 3 个生命周期函数 :

  • onPageShow() 函数 : 进入该界面时 , 应用进入前台时 , 页面显示 , 回调该函数 ;
  • onBackPress() 函数 : 用户点击 回退键 , 回调该函数 ;
    • 注意 : 此时不会 回调 onPageHide 函数 ;
  • onPageHide() 函数 : 用户点击 Hone 键 , 页面进入后台 , 页面隐藏 , 回调该函数 ;
    • 注意 : 此时不会 回调 onBackPress 函数 ;

2、onBackPress 和 onPageHide 回调函数无关联


下图是 HarmonyOS 官方教程中的图 , onBackPress 和 onPageHide 函数的回调 , 经测试没有先后关系 , 是两种不同操作 对应的 不同的回调 ;

  • 只有在用户点击回退键时 , 才会回调 onBackPress 函数 ;
  • 只有在用户点击 Home 键或界面进入后台时 , 才会回调 onPageHide 函数 ;

在这里插入图片描述





三、代码示例 - @Entry 页面生命周期 + @Component 自定义组件生命周期




1、代码示例 - @Component 自定义组件生命周期


自定义组件代码示例 :

import hilog from '@ohos.hilog'

@Component
export struct MyComponent {

  // 创建后 , build 之前回调
  aboutToAppear(){
    console.log("HSL MyComponent aboutToAppear")
  }

  // 自定义子组件
  build() {
    Column({ space: 20 }) { // 设置子组件间距为10

      Text('Text1')
        .fontSize(20)
        .backgroundColor(Color.Green)

      Text('Text2')
        .fontSize(20)
        .backgroundColor(Color.Yellow)

      Text('Text3')
        .fontSize(20)
        .backgroundColor(Color.Gray)

    }
    .width('50%') // 设置 Row 的宽度
    .height('50%') // 设置 Row 的高度
    .backgroundColor(Color.Pink)
    .alignItems(HorizontalAlign.Center) // 水平居中
    .justifyContent(FlexAlign.Center) // 垂直居中
  }

  // build 之后 , 销毁前回调
  aboutToDisappear() {
    console.log("HSL MyComponent aboutToDisappear")
  }
}

2、代码示例 - @Entry 页面生命周期


页面代码示例 :

// 导入外部自定义子组件
import {MyComponent} from '../view/MyComponent';



@Entry
@Component
struct Example {
  aboutToAppear(){
    console.log("HSL Example aboutToAppear")
  }

  onPageShow() {
    console.log("HSL Example onPageShow")
  }

  onBackPress() {
    console.log("HSL Example onBackPress")
  }

  build() {
    // 必须使用布局组件包括子组件
    Column(){
      // 自定义子组件
      MyComponent();
    }
  }

  onPageHide() {
    console.log("HSL Example onPageHide")
  }

  aboutToDisappear(){
    console.log("HSL Example aboutToDisappear")
  }

}

3、进入页面后的效果


这里使用真机进行调试 , 进入页面后会打印如下日志 :

 I  HSL Example aboutToAppear
 I  HSL MyComponent aboutToAppear
 I  HSL Example onPageShow

先回调 页面组件 Example 的 aboutToAppear 函数 ,

然后回调了 自定义组件 MyComponent 的 aboutToAppear 函数 ,

最后 回调了 页面组件 Example 的 onPageShow 函数 ;

在这里插入图片描述


4、屏幕熄灭


写博客的时候 , 屏幕屏保激活 , 手机息屏了 , 此时会回调 页面组件 Example 的 onPageHide 函数 ;

 I  HSL Example onPageHide

在这里插入图片描述


5、屏幕点亮


再次解锁点亮屏幕 , 回调 页面组件 Example 的 onPageShow 函数 ;

 I  HSL Example onPageShow

在这里插入图片描述


6、按下 Home 键


按下 Home 键 , 应用页面进入后台 , 此时显示 Launcher 主界面 , 回调 页面组件 Example 的 onPageHide 函数 ;

 I  HSL Example onPageHide

在这里插入图片描述


7、Home 键返回


在 后台 应用 中查找该应用 , 将应用设置到前台 , 此时会 回调 页面组件 onPageShow 的 onPageShow 函数 ;

 I  HSL Example onPageShow

在这里插入图片描述


8、回退键退出应用


点击回退键 , 退出应用 , 此时会回调 Example 页面的 onBackPress 函数 / onPageHide 函数 / aboutToDisappear 函数 , 然后回调 MyComponent 自定义组件的 aboutToDisappear 函数 ;

 I  HSL Example onBackPress
 I  HSL Example onPageHide
 I  HSL Example aboutToDisappear
 I  HSL MyComponent aboutToDisappear

在这里插入图片描述

  • 45
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
在 MATLAB 中,回调函数是一种特殊的函数,它在特定事件发生时被调用。以下是 MATLAB 回调函数语法规则: 1. 回调函数应该是一个独立的函数文件(.m 文件),而不是脚本文件。 2. 回调函数应该以特定的输入参数形式定义,这些参数依赖于特定事件的类型。通常,第一个输入参数是源对象(source object),表示触发事件的对象,接下来的参数是事件数据(event data)。 3. 回调函数可以返回输出参数,这取决于事件的需求。 4. 回调函数应该在定义和注册回调时指定,以确保在特定事件发生时被正确调用。 5. 回调函数应该位于 MATLAB 搜索路径之内,以便 MATLAB 能够找到并正确调用它。 下面是一个回调函数的示例代码: ```matlab % 回调函数定义 function myCallback(src, eventData) % 执行回调操作 disp('Callback function called!'); disp(['Source object: ', src.Name]); disp(['Event data: ', eventData.EventName]); end % 创建源对象 button = uicontrol('Style', 'pushbutton', 'String', 'Click me'); % 注册回调函数 button.Callback = @myCallback; ``` 在上面的示例中,`myCallback` 函数作为回调函数被定义,在被调用时会显示一些信息。`button` 对象的 `Callback` 属性被设置为 `@myCallback`,以指定该函数作为按钮点击事件的回调函数。当按钮被点击时,回调函数将被调用执行。 请注意,回调函数的具体语法规则可能会根据特定的事件类型和对象类型而有所不同。上述示例仅为示范目的,请根据实际情况进行适当的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值