003、应用程序框架-UIAbility

之——UIAbility

目录

之——UIAbility

杂谈

正文

1.UIAbility

2.基本使用

2.1 创建Ability工程

2.2 添加基础功能

2.3 新建页面

2.4 页面间的跳转

3.生命周期

总结


杂谈

        UIAbility,其中的页面创建、页面间的跳转、数据传递、生命周期。


正文

1.UIAbility

        UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。

        每一个UIAbility实例,都对应于一个最近任务列表中的任务。 

        它是应用程序的入口:

        它是应用间的跳转方式:

         一个UIAbility实例对应一个任务栏任务:

        一个应用可以有一个UIAbility,也可以有多个UIAbility。例如浏览器应用可以通过一个UIAbility结合多页面的形式让用户进行的搜索和浏览内容;而聊天应用增加一个“外卖功能”的场景,则可以将聊天应用中“外卖功能”的内容独立为一个UIAbility,当用户打开聊天应用的“外卖功能”,查看外卖订单详情,此时有新的聊天消息,即可以通过最近任务列表切换回到聊天窗口继续进行聊天对话。

        一个UIAbility可以对应于多个页面,建议将一个独立的功能模块放到一个UIAbility中,以多页面的形式呈现。例如新闻应用在浏览内容的时候,可以进行多页面的跳转使用。


2.基本使用

2.1 创建Ability工程

        打开DevEco Studio,选择一个Empty Ability工程模板,创建一个工程,例如命名为MyApplication。

  • 在src/main/ets/entryability目录下,初始会生成一个UIAbility文件EntryAbility.ts。可以在EntryAbility.ts文件中根据业务需要实现UIAbility的生命周期回调内容。
  • 在src/main/ets/pages目录下,会生成一个Index页面。这也是基于UIAbility实现的应用的入口页面。可以在Index页面中根据业务需要实现入口页面的功能。

2.2 添加基础功能

        为index页面添加基础样式,添加button按钮,添加onClick事件:

2.3 新建页面

        为了实现页面的跳转和数据传递,需要新建一个页面。在原有Index页面的基础上,新建一个页面,例如命名为Second.ets。在src/main/ets/pages目录下,右键New->Page,新建一个Second页面,用于实现页面间的跳转和数据传递。 

        可根据用户需要定义second页面的功能。

2.4 页面间的跳转

        两个页面间的跳转和数据传递:

         参数传递:

        API9及以上,router.pushUrl()方法新增了mode参数,使得目前可以将mode参数配置为router.RouterMode.Single单实例模式和router.RouterMode.Standard多实例模式。

        在单实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近同url页面会被移动到栈顶,移动后的页面为新建页,原来的页面仍然存在栈中,页面栈的元素数量不变;如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数量会加1。

        当页面栈的元素数量较大或者超过32时,可以通过调用router.clear()方法清除页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。

        但如果是不想生成新页面是想替换掉目前的同url页面,那么就是用:

        router.replaceUrl()方法,在单实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近同url页面会被移动到栈顶,替换当前页面,并销毁被替换的当前页面,移动后的页面为新建页,页面栈的元素数量会减1;如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数量不变。

        state修饰是表示页面创建刷新时候的状态修饰,表示页面创建刷新时候就会给src赋值,而当second回到index时候如果有消息传递,index的state是不会刷新触发的。 后文有相应解决办法。

         返回跳转:

        例如调用router.clear()方法清空了页面栈中所有历史页面,仅保留当前页面,此时则无法通过调用router.back()方法返回到上一个页面。

        另外还可以返回指定页面:

router.back({ url: 'pages/Index' });

         页面返回可以根据业务需要增加一个询问对话框。

         即在调用router.back()方法之前,可以先调用router.enableBackPageAlert()方法开启页面返回询问对话框功能。

router.enableBackPageAlert({message: 'Message Info'
});router.back();

         在Second页面中,调用router.back()方法返回上一个页面或者返回指定页面时,根据需要继续增加自定义参数,例如在返回时增加一个自定义参数src。

router.back({url: 'pages/Index',params: {src: 'Second页面传来的数据',}
})

        从Second页面返回到Index页面。在Index页面通过调用router.getParams()方法,获取Second页面传递过来的自定义参数。

        

import router from '@ohos.router';
@Entry
@Component
struct Index {@State src: string = '';onPageShow() {this.src = (router.getParams() as Record<string, string>)['src'];}// 页面刷新展示...
}

        调用router.back()方法,不会新建页面,返回的是原来的页面,在原来页面中@State声明的变量不会重复声明,以及也不会触发页面的aboutToAppear()生命周期回调,因此无法直接在变量声明以及页面的aboutToAppear()生命周期回调中接收和解析router.back()传递过来的自定义参数。需要用到router.getParams()方法。

  • 这行代码是在获取路由参数,并将其赋值给 this.src。
  • router.getParams() 是 HarmonyOS 中获取路由参数的方法,它返回一个包含所有路由参数的对象。
  • (router.getParams() as Record<string, string>) 这部分代码是将获取到的路由参数对象强制类型转换为 Record<string, string> 类型。Record<K, T> 是 TypeScript 中的一个工具类型,用于创建一个对象类型,其属性的键是 K 类型,属性的值是 T 类型。在这个例子中,K 和 T 都是 string,所以 Record<string, string> 表示一个所有属性的键和值都是字符串的对象。
  • ['src'] 是在访问这个对象的 src 属性。这个属性的值就是路由参数 src 的值。
  • 所以,this.src = (router.getParams() as Record<string, string>)['src']; 这行代码的意思是获取路由参数 src 的值,并将其赋值给 this.src。

3.生命周期

        当用户浏览、切换和返回到对应应用的时候,应用中的UIAbility实例会在其生命周期的不同状态之间转换。

        UIAbility类提供了很多回调,通过这些回调可以知晓当前UIAbility的某个状态已经发生改变:例如UIAbility的创建和销毁,或者UIAbility发生了前后台的状态切换。

        为了实现多设备形态上的裁剪和多窗口的可扩展性,系统对组件管理和窗口管理进行了解耦。UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态,WindowStageCreate和WindowStageDestroy为窗口管理器(WindowStage)在UIAbility中管理UI界面功能的两个生命周期回调,从而实现UIAbility与窗口之间的弱耦合。


总结

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

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

相关文章

【数据结构】环形队列

环形队列 1. 定义 环形队列就是将队列在逻辑上看作环形结构、物理上仍是数组形式存储的一种数据结构。 其实现主要分为两种情况&#xff1a; 浪费空间法记录空间法 2. 实现 实现要考虑的是成员变量 2.1 记录空间法 使用used标识当前存储了多少元素&#xff0c;如果为空&a…

【0240】源码分析PG内核中的关键字列表(SQL keywords)

相关文章: 【0236】聊一聊PG内核中的命令标签(Command Tags、CommandTag、tag_behavior) 【0239】从编译原理角度理解 #include “xxx“ 或 #include<xxx> 的实现机制 1. PostgreSQL的SQL关键字列表(SQL Keywords) 1.1 keywords.c源文件内容 keywords.c源文件中的内容…

03.PostgreSQL常用索引与优化

PostgreSQL常用索引与优化 主要内容转载自《PostgreSQL 开发指南》 索引&#xff08;Index&#xff09;可以用于提高数据库的查询性能&#xff1b;但是索引也需要进行读写&#xff0c;同时还会占用更多的存储空间&#xff1b;因此了解并适当利用索引对于数据库的优化至关重要。…

基于ASP.NET MVC技术的图书管理系统的设计与实现

基于ASP.NET MVC技术的图书管理系统的设计与实现 摘要&#xff1a;图书管理系统是一套高新科学技术和图书知识信息以及传统历史文化完美结合的体现。它改变了传统图书收藏的静态书本式图书服务特征&#xff0c;实现了多媒体存取、远程网络传输、智能化检索、跨库无缝链接、创造…

type-c充电器输出电压5V9V12V15V20V PD协议诱骗快充应用方案

Type-C接口的PD充电器&#xff08;如iPhone的20W充电器&#xff09;默认是没有电压输出的&#xff0c;想要让Type-C的充电器输出5V、9V、12V、15V、20V&#xff0c;只需要在产品上使用一颗快充取电芯片XSP08即可。 工作原理&#xff1a; 各类小家电产品如平板电脑、智能穿戴产…

服务器感染了.mallox勒索病毒,如何确保数据文件完整恢复?

尊敬的读者&#xff1a; 随着数字化时代的不断发展&#xff0c;网络安全问题变得日益突出。近日&#xff0c;一种新的威胁——.mallox病毒&#xff0c;以其高度狡猾的勒索手段引起了广泛关注。本文将深入介绍.mallox病毒的威胁、如何应对被其感染的情况&#xff0c;以及如何通…

私有化外卖软件:打造专属美食配送体验

随着互联网的普及和人们生活节奏的加快&#xff0c;外卖已经成为人们日常生活的一部分。为了满足客户的个性化需求&#xff0c;我们开发了一款私有化外卖软件&#xff0c;旨在为您提供专属的美食配送服务。 一、定制化服务&#xff1a;满足您的独特需求 我们的私有化外卖软件可…

什么是Ros(二)- 结构和通讯概述

目录 1.架构 2.通讯 参考文献 上接&#xff1a;什么是Ros&#xff08;一&#xff09;-CSDN博客 1.架构 共三层&#xff1a;OS 层&#xff0c;中间层&#xff0c;应用层。 OS 层&#xff1a;OS 层是操作系统层也就是我们现在使用的ubuntu&#xff08;linux&#xff09;&…

win10下在Qt中使用VTK(安装VS2017+安装QT5.9.9+编译配置VTK8.2.0)

目录 前言一、安装Visual Studio20171&#xff09;官网下载可执行的安装程序2&#xff09;安装3&#xff09;启动 二、安装Qt 5.9.91&#xff09;下载可执行的安装程序2&#xff09;安装3&#xff09;配置环境变量 三、安装Cmake1&#xff09;下载可执行的安装程序2&#xff09…

【深度优先】LeetCode1932:合并多棵二叉搜索树

作者推荐 动态规划LeetCode2552&#xff1a;优化了6版的1324模式 题目 给你 n 个 二叉搜索树的根节点 &#xff0c;存储在数组 trees 中&#xff08;下标从 0 开始&#xff09;&#xff0c;对应 n 棵不同的二叉搜索树。trees 中的每棵二叉搜索树 最多有 3 个节点 &#xff0…

令人疑惑的Promise相关问题

令人疑惑的Promise相关问题 问题1 const promise new Promise((resolve, reject) > {reject(Error(Error occurred)); });promise.catch(error > console.log(error.message)); promise.catch(error > console.log(error.message));输出&#xff1a; Error occurr…

AWS中使用ECS时ecsTaskExecutionRole缺失

文章目录 问题解决参考 问题 在AWS中使用Amazon Elastic Container Service (Amazon ECS) 创建集群&#xff0c;任务&#xff0c;服务和容器时返回ecsTaskExecutionRole的问题&#xff0c;进行解决。 在事件中查看具体报错如下&#xff1a; service Windows-test failed to l…

一种excel多线程并发写sheet的方案

一、背景 有一次项目的需求要求导出excel&#xff0c;并且将不同的数据分别写到不同的sheet中。 二、 方案概述 首先一开始使用easyexcel去导出excel&#xff0c;结果发现导出时间需要3秒左右。于是想着能不能缩短excel导出时间&#xff0c;于是第一次尝试使用异步线程去查询数…

人工智能原理复习--确定性推理

文章目录 上一篇推理概述自然演绎推理合适公式 归结演绎推理归结原理归结反演 提升归结效率下一篇 上一篇 人工智能原理复习–知识表示&#xff08;二&#xff09; 推理概述 推理就是按某种策略由已知判断推出另一判断的思维过程 分类&#xff1a; 演绎推理、归纳推理、默…

什么是GRS认证?什么让它这么火?

【什么是GRS认证&#xff1f;什么让它这么火&#xff1f;】 对于外贸公司而言&#xff0c;GRS&#xff08;Global Recycled Standard&#xff09;认证成为了一个备受关注的认证标准&#xff0c;它对于现代企业来说具有重要的意义。GRS认证是针对纺织品行业的认证标准&#xff0…

kafka 集群 ZooKeeper 模式搭建

Apache Kafka是一个开源分布式事件流平台&#xff0c;被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序 Kafka 官网&#xff1a;Apache Kafka 关于ZooKeeper的弃用 根据 Kafka官网信息&#xff0c;随着Apache Kafka 3.5版本的发布&#xff0c;Zookeeper现…

Christmas is Coming,一起来DIY雪花灯啦

亲爱的朋友们&#xff0c;圣诞节即将到来&#xff01;是不是很期待和家人、朋友一起欢度圣诞夜呢&#xff1f;KCC深圳联合立创开源特别为大家精心挑选了一款氛围感满满的雪花灯&#xff0c;让我们一起创造自己的圣诞礼物~ 彩色丝印PCB版的触摸无极调光雪花灯 哇&#xff0c;立创…

VL53-400激光测距传感器

一、产品简介 先由激光二极管对准目标发射激光脉冲。经目标反射后激光向各方向散射。部分散射光返回到传感器接收器&#xff0c;被光学系统接收后成像到雪崩光电二极管上。雪崩光电二极管是一种内部具有放大功能的光学传感器&#xff0c;因此它能检测极其微弱的光信号。记录并…

6.9 Windows驱动开发:内核枚举进线程ObCall回调

在笔者上一篇文章《内核枚举Registry注册表回调》中我们通过特征码定位实现了对注册表回调的枚举&#xff0c;本篇文章LyShark将教大家如何枚举系统中的ProcessObCall进程回调以及ThreadObCall线程回调&#xff0c;之所以放在一起来讲解是因为这两中回调在枚举是都需要使用通用…

XML处理相关——学习一些处理脚本(1)——(待完善)

python脚本 import osfrom Bio.Blast import NCBIXMLimport FetchUtil #https://github.com/NiallScott/FetchUtils import randomif not os.path.exists(XML):os.mkdir(XML) if not os.path.exists(dicts):os.mkdir(dicts)def bestrecipblast(org, seed, thresh5, queueNone)…