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

文章目录

  • 一、ArkTS @Component 自定义组件生命周期
    • 1、自定义组件生命周期
    • 2、aboutToAppear 函数执行时机和作用
    • 3、aboutToDisappear 函数执行时机和作用
    • 4、代码示例
  • 二、ArkTS @Entry 页面生命周期
    • 1、@Entry 页面生命周期
    • 2、onBackPress 和 onPageHide 回调函数无关联
  • 三、代码示例 - @Entry 页面生命周期 + @Component 自定义组件生命周期
    • 1、代码示例 - @Component 自定义组件生命周期
    • 2、代码示例 - @Entry 页面生命周期
    • 3、进入页面后的效果
    • 4、屏幕熄灭
    • 5、屏幕点亮
    • 6、按下 Home 键
    • 7、Home 键返回
    • 8、回退键退出应用



在这里插入图片描述


参考文档 : <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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/677818.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【NoSQL数据库】Redis简介

Redis Redis简介 Redis关系型数据库和非关系型数据库Redis 简介redis速度快的原因 Redis 配置Linux 源码安装 关系型数据库和非关系型数据库 关系型数据库&#xff08;Relational Database&#xff09;和非关系型数据库&#xff08;Non-Relational Database&#xff09;是两种…

[个人感悟] 多线程问题应该考察哪些问题? (Java篇)

前言 “如何做一个合格的多线程开发者? 你真的懂多线程么&#xff1f;” 作为编程初学者被问的最多的问题, 本文就这个问题. 详细的讲讲对方究竟为什么要问这个问题, 并且回答问题的主要思路框架. PS: 本文主体背景为Java语言. 其他语言应当为同理. 问题 - 单线程问题 什么是…

中信建投证券信息技术部PMO高级经理张子洋受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 中信建投证券股份有限公司信息技术部PMO高级经理张子洋先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“浅谈项目管理标准化的建设及实践分享”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题…

[Flask]开源项目--基于Faster R-CNN的在线害虫识别系统

项目演示效果可见视频&#xff1a; 【现已开源】害虫在线识别系统-基于pytorchflaskhttps://www.bilibili.com/video/BV1yx4y1u74y/?vd_source80963105a0c8d89bb119f3ebca249b22&#xff01;&#xff01;&#xff01;---本项目仅供交流学习&#xff0c;禁止商用---&#xff0…

【外汇天眼】选择外汇EA的关键:策略适配、风险控制与稳定性评估

外汇EA&#xff08;Expert Advisor&#xff09;是外汇交易市场中广泛使用的自动化交易系统。它们通过预定义的规则和算法自动执行交易&#xff0c;旨在为交易者提供便捷的交易体验&#xff0c;同时提高交易效率和准确性。本文将从策略选择、风险控制和稳定性评估三个方面&#…

1panel服务器面板迁移Docker容器存储路径

1panel服务器面板迁移Docker容器存储路径 1、停止Docker服务 找到容器菜单&#xff0c;在配置中点击停止。 2、迁移Docker容器目录 Docker默认存储目录/var/lib/docker 2.1、无已部署容器 删除docker目录&#xff0c;避免额外的磁盘空间占用。 2.2、有已部署容器 若需保留…

AIGC绘画设计基础——迄今为止你还没学会用AI提高工作效率吗?

对于我来说&#xff0c;在工作效率提升&#xff0c;绘画创意生成&#xff0c;视频制作等等方面&#xff0c;都有了质的飞跃提高。 下面我分别从不同方面说一下AI带给我的提效&#xff0c;并且也分享我用的好用工具给到大家。 一、工作提效 我的本职工作是从事设计管理工作&am…

YOLOv5改进 | 注意力机制 | 添加SimAM注意力机制【全网独家+附完整代码】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 压缩和激励模块&#xff08;SE&#xff09;以及空间通道注意力模块&#xff08;CBAM&#xff09;的注意力机制取得了巨大成功。本文介绍了一…

功能强大且专业的PDF转换软件PDF Shaper Professional 14.2

PDF Shaper Professional是一款适用于Windows的程序&#xff0c;可让您在计算机上处理PDF文件。 要开始使用PDF Shaper Professional&#xff0c;您需要在Windows计算机上下载并安装该程序。您还应该有合适的驱动程序和编解码器来处理计算机上的文本和图形。 安装程序后&#…

从零开始入门 LangChain

前言 最近一直在做 RAG 相关的内容&#xff0c;也学习了一段时间 LangChain 框架的用法。 本篇文章中将和大家讲述什么是 LangChain &#xff0c;以及 LangChain 解决了现在大模型发展的哪些问题&#xff0c;然后会讲解LangChain 中基础的概念和组件。在此基础上&#xff0c;…

经纬恒润成功研发LRR610雷达先进算法!

好消息&#xff01;经纬恒润搭载Arbe芯片组的LRR610 4D成像雷达算法开发出先进的后点云算法&#xff0c;并已圆满完成集成工作&#xff0c;这标志着智能驾驶感知系统迈向了一个新的里程碑。 经纬恒润自主开发的成像雷达算法&#xff0c;可以有效地跟踪数百个运动和静止目标&am…

亿级数据过滤和布隆过滤器

如何高效实现存在判断 在刷抖音时你有刷到过重复的推荐内容 吗&#xff1f;这么多的推荐内容要推荐给这么多的用户&#xff0c;它是怎么保证每个用户在看推荐内容时&#xff0c;保证不会出现之前已经看过的推荐视频呢&#xff1f;也就是说&#xff0c;抖音是如何实现 推送去重…

java 工作排序(Job Sequencing Problem)

给定一个作业数组&#xff0c;其中每个作业都有一个截止期限&#xff0c;如果作业在截止期限之前完成&#xff0c;则可获得相关利润。此外&#xff0c;每个作业都占用一个单位时间&#xff0c;因此任何作业的最小可能截止期限都是 1。如果一次只能安排一项作业&#xff0c;则最…

开源规则引擎LiteFlow项目应用实践

本文介绍基于开源规则引擎LiteFlow&#xff0c;如何开发规则设计器&#xff0c;在低代码平台中集成规则引擎&#xff0c;并在项目中实现应用的效果。由于低代码平台使用规则引擎实现了逻辑编排的需求&#xff0c;所以本文中的叫法为“逻辑设计”、“逻辑编排”、“逻辑流引擎”…

RabbitMQ学习笔记(二)SpringAMQP的使用、消息转换器

文章目录 前言3 SpringAMQP3.1 介绍3.2 简单队列模型3.3 工作队列模型3.4 发布/订阅模型3.4.1 Fanout广播模型3.4.2 Direct定向模型3.4.3 Topic通配符模型 3.5 消息转换器 前言 RabbitMQ学习笔记(一)RabbitMQ部署、5种队列模型 3 SpringAMQP 3.1 介绍 AMQP&#xff08;Adva…

白酒:产地与白酒品牌形象的建设与推广

云仓酒庄豪迈白酒作为中国白酒市场中的知名品牌&#xff0c;其产地与品牌形象的建设与推广对于提升品牌竞争力和市场份额具有重要意义。产地作为白酒品质和特色的重要标志&#xff0c;对于品牌形象的塑造和推广具有关键作用。 首先&#xff0c;云仓酒庄豪迈白酒的产地是其品质和…

AI降痕工具使用指南:如何有效降低AIGC疑似度

随着人工智能技术的突飞猛进&#xff0c;AI生成内容&#xff08;AIGC&#xff09;已被广泛用于学术论文撰写中&#xff0c;提高效率同时也带来了原创性的挑战。面对日益严格的学术审查&#xff0c;一个突出的问题是&#xff1a;使用AI代写的论文能否通过内容检测&#xff1f;因…

第二证券股票杠杆:4分钟直线涨停!这一赛道,AH股集体爆发!

今日早盘&#xff0c;A股继续小幅震动收拾&#xff0c;首要股指涨跌互现&#xff0c;两市个股跌多涨少&#xff0c;成交有萎缩的趋势。 盘面上&#xff0c;医药、中字头、旅游、房地产等板块相对活跃&#xff0c;混合实践、玻璃基板、AI手机PC、光刻机等板块跌幅居前。 “中字…

活动投票小程序源码系统 礼物道具活动多多 前后端分离 带完整的安装代码包以及搭建教程

系统概述 在当今数字化快速发展的时代&#xff0c;小程序已成为连接用户与商家、内容与服务的重要桥梁。特别是活动投票类小程序&#xff0c;因其便捷性、互动性和参与性&#xff0c;受到了广大用户的热烈追捧。为了满足市场对高质量、易操作的活动投票小程序的需求&#xff0…

别慌!不知道如何处理#开头的字符串时,需要先了解一下什么是NCR

最近进行接口测试时抓包发现请求响应中有类似下面这些字符 起初试图对这些编码尝试各种decoder操作来一探其真身&#xff0c;遗憾的是均已失败告终&#xff08;后来发现&#xff0c;这些编码可以在浏览器中正常显示&#xff09;。最后得知这种奇怪的编码格式并不是编码,而是一种…