HarmonyOS开发:生命周期详解

news2024/9/24 11:24:28

目录

前言

  • 生命周期的概念
  • HarmonyOS生命周期
  • 最后

前言

随着移动端操作系统的多样化发展,HarmonyOS作为华为推出的一款面向全场景的分布式操作系统,受到了业内外的广泛关注。其实HarmonyOS的设计和开发模式,与传统的移动端操作系统有着显著的区别,特别是在应用的生命周期管理上,它引入了新的设计理念来适应多种设备和使用场景。对于开发者而言,深入理解HarmonyOS的生命周期对于开发高效、稳定的应用至关重要,而且任何技术框架它的生命周期都是重中之重的。那么本文就来详细解析HarmonyOS中应用的生命周期,帮助大家更好地掌握其开发精髓,欢迎大家在评论区留言交流。

生命周期的概念

在软件开发中,生命周期指的是一个对象从创建到销毁的整个过程;在操作系统中,这通常指的是一个应用程序或进程从启动到结束的各个阶段。其实生命周期的概念,就是指一个对象的从产生到销毁的过程,也就是生命周期是指程序从创建、开始、暂停、唤起、停止、销毁、卸载的过程。不同框架之间的生命周期有所差异,但是大致过程是一样的。

对于HarmonyOS来讲,它的生命周期管理不仅关乎应用的性能和用户体验,还涉及到系统资源的合理分配和调度。这里分享一下HarmonyOS的生命周期管理特点:

  • 组件化:HarmonyOS采用组件化的设计,应用由多个独立的组件组成,每个组件都有自己的生命周期。
  • 并发性:支持多任务并发执行,各个组件可以独立运行,互不干扰。
  • 弹性:应用可以根据系统资源和用户需求灵活调整自己的状态。
    HarmonyOS生命周期

从严格意义上讲,HarmonyOS的生命周期分为三个部分:应用级生命周期、页面级生命周期、组件的生命周期。

一、应用级生命周期

先来分享一下HarmonyOS应用生命周期,根据官方内容,结合实际使用情况来说,在app.js中可以定义如下应用生命周期函数:
在这里插入图片描述
其实HarmonyOS应用级生命周期就是整个HarmonyOS应用(App)的生命周期,App() 函数是用来注册一个小程序的,接收一个object参数,必须在app.js中调用,App() 必须调用且只能调用一次,app.js中定义了几个应用级的生命周期函数,具体如下所示:

  • onCreate: 当应用创建时调用;
  • onShow: 当应用处于前台时触发;
  • onHide: 当应用处于后台时触发;
  • onDestroy: 当应用退出时触发;

具体的代码文件中展示应用级生命周期的各个生命周期,如下所示:

export default class EntryAbility extends UIAbility {
  onCreate(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  }
  onShow(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onShow');
  }
  onHide(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onHide');
  }
  onDestroy() {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }
}

在这里插入图片描述

二、页面级生命周期

再来分享一下页面级生命周期,根据官方内容,结合实际使用情况来说,在页面JS文件中可以定义如下页面生命周期函数:
在这里插入图片描述
HarmonyOS页面级生命周期,其实就是基于HarmonyOS页面(page)的生命周期。在每一个页面注册函数Page()的参数里面,定义的几个关于页面生命周期函数,具体如下所示:

  • onInit:页面数据初始化完成时触发,只触发一次;
  • onShow:页面显示时触发;
  • onReady:页面创建完成时触发,只触发一次;
  • onHide:页面消失时触发;
  • onDestroy:页面销毁时触发;
  • onBackPress:当用户点击返回按钮时触发;
  • onActive:页面激活时触发;
  • onInactive:页面暂停时触发;
  • onNewRequest:FA已经启动时收到新的请求后触发;

需要特别说明的是,页面A的生命周期接口的调用顺序,具体如下所示:

  • 打开页面A:onInit() -> onReady() -> onShow()
  • 在页面A打开页面B:onHide()
  • 从页面B返回页面A:onShow()
  • 退出页面A:onBackPress() -> onHide() -> onDestroy()
  • 页面隐藏到后台运行:onInactive() -> onHide()
  • 页面从后台运行恢复到前台:onShow() -> onActive()
    在这里插入图片描述

具体的代码文件中展示页面生命周期的各个生命周期,如下所示:

export default class EntryAbility extends UIAbility {

  onInit(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onInit');
  }
  onReady(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onReady');
  }
  onShow(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onShow');
  }
  onHide(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onHide');
  }
  onDestroy() {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }
  onBackPress(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackPress');
  }
  onActive(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onActive');
  }
  onInactive(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onInactive');
  }
  onNewRequest() {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onNewRequest');
  }
}

**注意:**当切换页面需要多次渲染数据改变状态的时候,可以在onShow中使用;当只需初始化一次的时候,可在onInit或者onReady中使用;当需要清除定时器时,可在onDestroy中使用。

页面生命周期执行的顺序是:onInit --> onShow --> onHide。

三、组件的生命周期

组件的生命周期,其实就是基于HarmonyOS封装的组件(component)的生命周期,也是页面和自定义组件生命周期。在分享组件的生命周期之前,先来看一下页面和自定义组件的关系:

页面,即应用的UI页面,可以由一个或者多个自定义组件组成;自定义组件就是@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。

还有就是@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。需要注意的是,只有被@Entry装饰的组件才可以调用页面的生命周期。

在使用组件封装的时候,定义的几个关于组件生命周期函数,具体如下所示:

  • aboutToAppear:组件即将出现时回调该接口;
  • onDidBuild:组件build()函数执行完成之后回调该接口;
  • aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行;
  • onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景;
  • onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景;
  • onBackPress:当用户点击返回按钮时触发;

但是这些生命周期函数根据装饰分为被@Entry装饰的组件和@Component装饰的自定义组件两种生命周期,具体如下所示:
1、页面生命周期,用@Entry装饰的组件生命周期,提供以下生命周期接口:

  • onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景;
  • onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景;
  • onBackPress:当用户点击返回按钮时触发;
    这里展示一下被@Entry装饰的组件(页面)生命周期,具体如下所示:
    在这里插入图片描述

根据上面的流程图可以看到,是从自定义组件的初始创建、重新渲染和删除来详细分解的。

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

  • aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行;
  • onDidBuild:组件build()函数执行完成之后回调该接口,需要注意的是如果在onDidBuild函数中更改状态变量、使用animateTo等功能可能会导致不稳定的UI表现;
  • aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行,不能在aboutToDisappear函数中改变状态变量,尤其是@Link变量的修改可能会导致应用程序行为不稳定;

四、小结

通过上文关于HarmonyOS生命周期的介绍,可以汇总以下几个流程,结合程序运行的生命周期先后执行次序来总结,具体如下所示:

1、打开HarmonyOS的生命周期执行次序

(App)onCreate --> (App)onShow --> (Page)onInit -->(Page)onReady --> (Page)onShow 。

2、当进入下一个页面的生命周期执行次序

(当前页面)onHide --> (下一个页面)onInit --> (下一个页面)onReady --> (下一个页面)onShow。

3、当返回上一个页面的生命周期执行次序

(当前页面)onHide --> (上一个页面)onShow。

4、当离开HarmonyOS的生命周期执行次序

(App)onHide。

最后

通过本文的介绍,想必大家对HarmonyOS的生命周期有了更深刻的了解和学习,其实HarmonyOS的生命周期管理是其系统架构的重要组成部分,它给我们开发者提供了丰富的控制手段来优化应用的性能和用户体验,只有通过深入理解HarmonyOS的生命周期,我们才可以更好地利用系统提供的能力,开发出适应多种设备和场景的高质量应用。随着HarmonyOS生态的不断成熟,我们有理由相信它将为开发者带来更多的机遇,我们应当紧跟技术发展的步伐,不断学习和实践,以期在HarmonyOS的广阔天地中探索和创新。最后,在未来的开发中,让我们携手HarmonyOS,共同开启移动开发的新篇章!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【TwinCAT3教程】IEC61131-3编程基础

在开发可编程序控制器(PLC)的早期阶段没有统一的标准,这种编程语言不统一的情况,给用户带来极大的不方便,近几年由于自动化系统的发展,IEC的第七个工作组制定了IEC(International Electro techn…

三十七、MyBatis-Plus(3)

🌻🌻 目录 一、CRUD 扩展 (2)1.1 Select1.2 分页查询1.3 Delete1.3.1 物理删除1.3.2 逻辑删除 二、性能分析插件三、条件构造器四、代码自动生成器 一、CRUD 扩展 (2) 1.1 Select 查询所有: /* * 查询 * */Test //查询全部 public void sele…

PCB设计经验——布线原则

1.连线精简——避免直角布线 导线也应看作一种元器件,有自己的电阻,电感,电容 PCB走线在直角转弯的地方,信号前后部分相互影响,导致分布电容增加,对信号上升沿和下降沿有延缓影响。从阻抗的角度来说&#…

鸿蒙媒体开发【相机数据采集保存】拍照和图片

相机数据采集保存 介绍 本示例主要展示了相机的相关功能 接口实现相机的预览拍照功能。 效果预览 使用说明 弹出是否允许“CameraSample”使用相机?点击“允许”弹出是否允许“CameraSample”使用麦克风?点击“允许”进入预览界面,预览正…

快递点“内鬼”才是倒卖我们个人信息的源头

下面是一个真实的案例来分析一下我们的信息是怎么被倒卖出去的。以次来给大家敲响警钟,不要相信所谓的退货退款类的诈骗。【所有涉及到金钱的都是诈骗,获取你信息也很容易,所以不要轻信诈骗谎言】 01-盗取快递信息过程 内鬼与骗子勾结&…

深度学习(1)--机器学习、人工智能、深度学习的关系

1956 年提出 AI 概念,短短3年后(1959) Arthur Samuel 就提出了机器学习的概念: Field of study that gives computers the ability to learn without being explicitly programmed. 机器学习研究和构建的是一种特殊算法&#xff0…

Mindspore框架DCGAN模型实现漫画头像生成|(二)DCGAN模型构建

Mindspore框架DCGAN模型实现漫画头像生成 Mindspore框架DCGAN模型实现漫画头像生成|(一)漫画头像数据集准备Mindspore框架DCGAN模型实现漫画头像生成|(二)DCGAN模型构建Mindspore框架DCGAN模型实现漫画头像生成|(三&a…

广州市广州城市信息模型(CIM)白皮书学习

一级标题 二级标题 框架 四级标题 五级标题 六级标题 CIM平台定义 以建筑信息模型(BIM)、地理信息系统(GIS)、物联网(IoT)等技术为基础,整合城市地上地下、室内室外、历史现状未来多维多尺度信息模型数据和城市感知数据,构建起三维数字空间的城市…

主持人大赛活动流程和规则

比赛内容: ①命题主持三分钟 选手抽签获得一命题主持内容,思考三十秒后开始主持 ②模拟主持两分钟 选手提前自己准备好,模拟主持一段电视或广播节目。 要求创意新颖、声情并茂。 ③即兴演讲两分钟 选手现场抽题。抽到一个话题,思…

算法021:山脉数组的峰顶索引

山脉数组的峰顶索引. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/peak-index-in-a-mountain-array/ 这个题,看似好像不是递增或者递减数组&#xff…

【网络安全入门】学习网络安全必须知道的77个网络基础知识

1、TCP/IP 协议的四层模型(网络接口层、网络层、传输层、应用层) TCP/IP 协议是互联网通信的基础,四层模型中,网络接口层负责与物理网络的连接;网络层主要处理 IP 数据包的路由和转发;传输层提供端到端的可…

电路原理分析

文章目录 0 基础符号说明电容电感电阻U/IC二极管三极管变压器杂合元件IGBT电机运放开关TPJ高组态电阻上拉电阻可靠高电平提高驱动能力阻值选择下拉电阻可靠低电平晶振压电效应晶振原理实物电荷泵电路防倒灌电路0 基础符号说明 电容 电容 C Electrolytic capacitor 电解电容 E…

内网穿透--LCX端口转发实验

实验背景 通过公司带有防火墙功能的路由器接入互联网,然后由于私网IP的缘故,公网无法直接访问内部主机,通过端口转发,穿透访问内网主机服务。 实验设备 1.路由器一台,实现内部 DHCP 分配和边界 NAT 2.外网 window20…

Java语言程序设计——篇十一(3)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

JavaFX布局-ButtonBar

JavaFX布局-ButtonBar 常用属性buttonOrderpaddingbuttonMinWidth 实现方式Java实现fxml实现 一个特殊的容器,用于创建一组按钮,水平排列按钮太多,会被遮住,不会自动产生滚动条 常用属性 buttonOrder 预制顺序 buttonBar.setBut…

别再盲目推广了!Xinstall助你开启App线下推广新篇章

在这个数字化飞速发展的时代,App已经成为我们生活中不可或缺的一部分。然而,App市场的竞争也日益激烈,如何让你的App在众多竞争者中脱颖而出,成为每个推广者必须面对的问题。今天,就让我们一起探讨一下App线下推广的痛…

【2024】Datawhale AI夏令营 Task4笔记——vllm加速方式修改及llm推理参数调整上分

【2024】Datawhale AI夏令营 Task4笔记——vllm加速方式修改及llm推理参数调整上分 本文承接文章【2024】Datawhale AI夏令营 Task3笔记——Baseline2部分代码解读及初步上分思路,对其中vllm加速方式进行修改,推理速度获得了极大提升。另外,…

【JAVA入门】Day17 - GUI

【JAVA入门】Day17 - GUI 文章目录 【JAVA入门】Day17 - GUI一、组件二、事件 GUI 即图形化界面。 一、组件 一个 Java 的图形化界面项目主要用到了下面几种组件。 Java 中最外层的窗体叫做 JFrame。Java 中最上层的菜单叫做 JMenuBar。Java 中管理文字和图片的容器叫做 JLab…

快速体验LLaMA3模型微调(超算互联网平台国产异构加速卡DCU)

序言 本文以 LLaMA-Factory 为例,在超算互联网平台SCNet上使用异构加速卡AI 显存64GB PCIE,对 Llama3-8B-Instruct 模型进行 LoRA 微调、推理和合并。 超算互联网平台 异构加速卡AI 显存64GB PCIE 一、参考资料 github仓库代码:LLaMA-Fac…

C#中的Winform基础

program 每个Windows应用程序都会有一个Program类——程序入口点 [STAThread] ----指示应用程序的COM线程模型是单线程单元(如果无此特性,无法工作) static voidMain() —— 入口 System.Windows.Forms.Application类提供一系列静态方法和…