【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十六)

news2024/9/20 14:39:24

课程地址: 黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发

(本篇笔记对应课程第 25 - 26 节)

P25《24.Stage模型-UIAblity生命周期》

stage之所以叫这个名字,是因为它在运行时,会提供一个 AbilityStage 的舞台,这个舞台就是用来展示Ablity的,最常见的就是UIAbility,UIAbility就是UI界面的组件,它会提供绘制界面的窗口,将来在这个窗口绘制应用界面,应用就展示出来了。

微信目前还没有鸿蒙版本,先以微信举个例子:

微信的核心功能是社交,是核心功能肯定要放在入口Ability中。但其它非核心功能像视频号、看一看等,显然不应该再放在入口Ability中,它们应该有自己对应的Ability。点击 视频号进入视频号时,底层做了很多事情,创建了一个新的Ability,怎么验证呢?

在这里插入图片描述

进入视频号后,发现任务列表里会有 微信和视频号两个任务,在任务列表中每一个任务代表的就是一个独立的Ability。一个stage同一时间只能展示一个Ability,当点击视频号时,微信主功能Ability就进入了“幕后”,当点击切换回微信主功能时,其对应的 Ability 会再次切换回到舞台上。

在这里插入图片描述

在这里插入图片描述

值得注意的是,windowStage 也加入 UIAbility 的生命周期了(官方文档中WindowStage的钩子函数并不算UIAbility的生命周期函数):

在这里插入图片描述

进入 入口模块的 Ablity,会看到生命周期方法在这里被定义了:

在这里插入图片描述

生命周期钩子方法中配置默认加载了 pages/Index 页面,这就是为什么应用打开默认进入首页。可以在这里修改应用进入后默认加载的页面:

在这里插入图片描述

hilog是harmony提供的可以打印各种级别日志的API。

info()方法的第一个参数是一串16进制的数字,可以理解为一个用来标识的参数,将来在不同模块中可以用不同的标识数字,将来查看日志时可以根据这些标识,比较方便。

第二个参数是一个tag,也可以理解为标识功能,可以表示某个模块下某个功能对应的日志;

第三个参数是日志输出的内容,是一个字符串模板,{}中间是一个占位符,内容取决于第四个参数传递的内容。这个占位符还可以标记其对应内容是否公开,可以是public或private。如果是private,这些日志输出时就会隐藏起来。

在这里插入图片描述

查看日志时可以根据关键字进行过滤:

在这里插入图片描述

重新部署程序并查看打印日志:

在这里插入图片描述

切换到桌面:

在这里插入图片描述

在任务列表中将任务再激活:

在这里插入图片描述

按返回按钮退出应用:

在这里插入图片描述

这些就是UIAbility 生命周期的全部过程:

在这里插入图片描述

P26《25.Stage模型-页面及组件生命周期》

应用一启动,首先就会准备好一个Ability的舞台,在这个“舞台”上会去创建一个 UIAbility 的实例,接着会去初始化 windowStage 的一个舞台,在 windowStageCreate 钩子函数中,可以拿到 windowStage 并利用它去加载和渲染页面。那么页面和组件加载与渲染的过程是怎样的?这一节我们就来看一下页面及组件的生命周期。

在这里插入图片描述

如上图,onPageShow、 onPageHide、 onBackPress 这三个钩子函数是页面生命周期函数,页面的展示肯定是从入口组件开始的,所以这三个钩子函数只能在入口组件中使用,即使用 @Entry 装饰器的组件中。普通的自定义组件中是不能使用的。
aboutToAppear、aboutToDisappear 这两个和组件相关的生命周期钩子是组件创建之后与显示之前、组件即将销毁之前的钩子函数,在入口组件与普通组件中都可以使用。

首页中增加两个页面导航:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在首页中新增以下生命周期钩子:

在这里插入图片描述

lifeCirclePage 文件中也增加如下这5个生命周期钩子:

在这里插入图片描述

myText 子组件中也增加这5个生命周期钩子,注意,这个子组件非入口文件,是没有 onPageShow、 onPageHide、 onBackPress 这三个页面相关的生命周期钩子函数的,我们写上的目的是测试一下是否能触发。

存疑:MyText子组件中从父组件接收的变量 message 与 index 为什么不用@Prop修饰?

在这里插入图片描述

testPage1 与 testPage2 也加上:

在这里插入图片描述
在这里插入图片描述

进入首页,发现打印日志如下:

在这里插入图片描述

点击跳转生命周期测试页面,打印日志如下。由于点击跳转页面默认是页面栈的push模式,所以首页并没有销毁,而是隐藏了。

在这里插入图片描述

点击切换显示,打印出MyText子组件创建与销毁,因为它不是页面组件,所以与页面相关的3个生命周期钩子不起作用,写了也没用。

在这里插入图片描述

点击增删按钮操作数组数据:此时发现仅仅删除了1个元素,却触发了3次组件销毁,且之后又触发了2次组件创建,这是因为删除了一个元素,页面将所有元素都删除了,又将不该删除的元素重新创建了出来。

怎样避免这种情况?需要用到ForEach函数的第三个参数来为每个循环渲染的元素添加key值。

在这里插入图片描述

点击模拟器上的返回按钮:页面返回时,页面栈顶部的页面(当前页面)会被销毁,栈顶页面对应的组件会被全部销毁:

在这里插入图片描述

进入 TestPage1 页面:

在这里插入图片描述

push方式跳转 TestPage2 页面:

在这里插入图片描述

再由 push 跳转回 TestPage1 页面:push模式没有组件的创建和销毁,只有组件的隐藏和显示:

在这里插入图片描述

replace 方式跳转到 TestPage2 页面:

在这里插入图片描述

可见replace模式伴随的是组件的销毁与重新创建,这是需要消耗一定性能的。所以除非某个页面退出时再也不需要了,大多数情况下推荐使用push模式。

总结:
5个生命周期钩子:
1、aboutToAppear : 组件创建之后、build函数执行之前触发。可以在这里做一些数据初始化准备工作。数据准备好后build函数渲染时就可以用这些数据;
2、onPageShow、onPageHide、onBackPress : 页面显示、隐藏与页面点击返回时,可以在这里处理功能性逻辑;
3、aboutToDisappear : 组件即将被销毁前,可以做一些关键数据保存或资源释放类的工作。

实践:

在这里插入图片描述

解决方式参考:https://developer.huawei.com/consumer/cn/forum/topic/0203136657756744585
解决方式参考

在这里插入图片描述

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

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

相关文章

骚操作:如何让一个网页一直处于空白情况?

🧑‍💻 写在开头 点赞 收藏 学会🤣🤣🤣 如题,惯性思路很简单,就是直接撸上一个空内容的html。 注:以下都是在现代浏览器中执行,主要为**Chrome 版本 120.0.6099.217&…

TPS61085非同步650kHz,1.2MHz, 18.5V升压DCDC芯片

1 特点 TPS61085外观和丝印PMKI 2.3 V 至 6 V 输入电压范围 具有 2.0A 开关电流的 18.5V 升压转换器 650kHz/1.2MHz 可选开关频率 可调软启动 热关断 欠压闭锁 8引脚VSSOP封装 8引脚TSSOP封装 2 应用 手持设备 GPS接收器 数码相机 便携式应用 DSL调制解调器 PCMCIA卡 TFT LCD…

ChatGPT API教程在线对接OpenAI APIKey技术教程

一、OpenAI基本库介绍 您可以通过 HTTP 请求与 API 进行交互,这可以通过任何编程语言实现。我们提供官方的 Python 绑定、官方的 Node.js 库,以及由社区维护的库。 要安装官方的 Python 绑定,请运行以下命令: pip install open…

全国计算机二级C++题库笔记

全国计算机二级C题库笔记 Ⅰ. 选择题专项训练1 公共基础部分2 二级C程序设计第1~4章》每章标题1. C标识符命名规则2. 面向对象的三个主要特征3. C的四个开发步骤4. 关于类和对象的叙述5. !和&&的作用6. C枚举类型初值问题7. ASCII码对照表8. 运算符两边的数据类型&…

ONLYOFFICE 8.1版本桌面编辑器深度体验:创新功能与卓越性能的结合

ONLYOFFICE 8.1版本桌面编辑器深度体验:创新功能与卓越性能的结合 随着数字化办公的日益普及,一款高效、功能丰富的办公软件成为了职场人士的必备工具。ONLYOFFICE团队一直致力于为用户提供全面而先进的办公解决方案。最新推出的ONLYOFFICE 8.1版本桌面编…

08.QT控件:QWidget

一、Widget 简介 Widget 是 Qt 中的核⼼概念.。英⽂原意是 "小部件",我们此处也把它翻译为 "控件"。控件是构成⼀个图形化界⾯的基本要素。 Qt 作为⼀个成熟的 GUI 开发框架, 内置了⼤量的常⽤控件。并且 Qt 也提供了 "⾃定义控件" 的…

C和C++实现stack的对比

本篇文章,我们将对比C语言和C实现栈的不同来体会C的魅力! 1.栈的介绍 栈(Stack)是一种常见的数据结构,它是一种特殊的线性表,只允许在一端进行数据的插入和删除操作。这一端通常被称为栈顶(Top…

移位操作符

目录 移位 >> --- 右移操作符 右移操作符代码的使用 代码验证 算术右移和逻辑右移 验证Visual Studio使用的是算术右移还是逻辑右移 逻辑右移 or 算术右移的代码验证 右移操作符对正整数有除2的效果&#xff08;除2是整数除法的除2&#xff09; 验证 << -…

Day3:203 移除链表元素 707设计链表 206反转链表

题目&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

[数据集][目标检测]棉花检测数据集VOC+YOLO格式389张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;389 标注数量(xml文件个数)&#xff1a;389 标注数量(txt文件个数)&#xff1a;389 标注类别…

Excel如果将一个表格拆分为多个表格,文末另赠彩蛋!

前期分享如何用数据透视表将一个表格拆分成多个工作薄Excel一个表格拆分多个表格&#xff0c;你学会了吗&#xff1f; 今天刘小生分享另外一种&#xff0c;如果拆分成多个工作表格文件&#xff01; 如何将一个表格根据部门进行拆分成多个表格&#xff0c;再点对点发送给各部门…

浅析Vite本地构建原理

前言 随着Vue3的逐渐普及以及Vite的逐渐成熟&#xff0c;我们有必要来了解一下关于vite的本地构建原理。 对于webpack打包的核心流程是通过分析JS文件中引用关系&#xff0c;通过递归得到整个项目的依赖关系&#xff0c;并且对于非JS类型的资源&#xff0c;通过调用对应的loade…

宝宝早教电子图书 酷得电子方案

宝宝早教发声书是一种专为婴幼儿设计的图书&#xff0c;旨在通过有趣的图画和声音来吸引宝宝的注意力&#xff0c;帮助他们学习语言、认知和发展各种技能。这类书籍通常包括以下特点&#xff1a; 鲜艳的图画&#xff1a;发声书通常配有色彩鲜艳、形象生动的图画&#xff0c;以…

什么美业系统好用?美业门店收银系统源码分享、小程序展示

专业美业系统与普通系统相比&#xff0c;更加贴合美业门店的经营需求&#xff0c;提供了更全面、便捷、高效的管理功能&#xff0c;有助于提升门店的服务质量和经营效益。 博弈美业系统包括PC、iPad、手机、小程序四大端口&#xff0c;满足不同人群的各种需求。客户可从小程序…

使用Leaflet和瓦片地图实现离线地图的技术指南

引言 在现代的Web应用中&#xff0c;地图服务扮演着越来越重要的角色。然而&#xff0c;在一些特殊环境下&#xff0c;如偏远地区或网络环境不稳定的情况下&#xff0c;依赖在线地图服务可能会受到限制。因此&#xff0c;实现离线地图功能成为了一个重要的需求。本文将介绍如何…

Jenkins定时构建自动化(四):Python 的 argparse 模块

目录 一、主要功能和用途 二、核心类和方法 三、总结 四、argparse模块示例 Jenkins定时构建自动化(一)&#xff1a;Jenkins下载安装配置-CSDN博客 Jenkins定时构建自动化(二)&#xff1a;Jenkins的定时构建-CSDN博客 Jenkins定时构建自动化(三)&#xff1a;手动定时构建…

【服务器08】之【游戏框架】之【加载主角】

首先简单了解一下帧率 FixedUpdate( ) > Update( ) > LateUpdate( ) 首先FixedUpdate的设置值 默认一秒运行50次 虽然默认是0.02秒&#xff0c;但FiexedUpdate并不是真的0.02秒调用一次&#xff0c;因为在脚本的生命周期内&#xff0c;FixedUpdate有一个小循环&…

嵌入式开发板屏幕显示汉字

一、实验目的 1&#xff0e;编写能够在嵌入式开发板LCD上显示汉字的程序&#xff1b; 2&#xff0e;在Ubuntu系统中编译上述程序生成可执行文件&#xff1b; 3&#xff0e;到开发板中验证。 二、实验步骤 1. Ubuntu系统上编写验证程序 Ubuntu系统上编写的验证程序如下&…

【亲测好用】神级PSAI插件大揭秘:三款创成式修图神器,让你解放双手

PsBeta被停用后&#xff0c;小编一直想找到能够平替PsBeta创成式填充功能的插件。 功夫不负有心&#xff0c;终于被我找到啦&#xff0c;现在就给大家揭秘这三款宝藏修图神器&#xff0c;希望能够帮到大家。 1.插件名称&#xff1a;Starai 无需科学上网&#xff0c;还自带提示…

文库小程序搭建部署:实现资源共享正向反馈

文档库相信大家应该不陌生&#xff0c;日常我们的工作模板、会议模板、求职时的简历模板、教育界的教学模板等来源方式都出自于文档库&#xff0c;随着互联网的发展和工作需求&#xff0c;文档模板开启了新型的知识变现新途径&#xff0c;通过文库小程序&#xff0c;我们不仅能…