HarmonyOS Stage模型 用程序运行切换 验证UIAbility 启动模式(下) 验证:specified启动模式 Ability间切换

上文 HarmonyOS Stage模型 用程序运行切换 验证UIAbility 启动模式(上) 验证:singleton、multiton、standard启动模式 我们已经验证完了 singleton multiton standard 三种启动模式

留下了毕竟复杂的 specified

这里 首先 我们要写两个不同的界面
index 编写代码如下

import router from '@ohos.router'
@Entry
@Component
struct Dom {@State StringArr:string[] = ["key1","key2","key3"];build() {Row() {Column(){ForEach(this.StringArr,(item)=>{Button(item).onClick(()=>{router.pushUrl({url: "pages/Twox",params: {innt: item}})})})}.width('100%')}.height('100%')}
}

我们创建了一个数组 然后 循环渲染 每一次都在页面上挂一个button按钮
内容就是当前下标内容
点击事假中 用路由 跳转到 Twox 界面 传入当前 下标对象 叫 innt代理名

Twox 组件编写代码如下

import router from '@ohos.router'
let innt:string = router.getParams()["innt"]
@Entry
@Component
struct Twox {build() {Row() {Column(){Text(innt)}.width('100%')}.height('100%')}
}

我们定义 innt string 类型 获取路由传来的 innt字段
然后 用text组件展示内容

然后 我们先简单运行项目
在这里插入图片描述
我们 index 数组循环出的按钮就显示出来了
然后我们点击一个

路由跳转和参数接收也没有任何问题
在这里插入图片描述
但 我们要做 specified 就要做 Ability模块间的跳转 而不是 page页面间的跳转了 因此 就不能用这种传统的 路由形式了

然后 我们当前这个模块 launchType 直接用默认模式就好了 将 launchType 字段配置去掉就好了
在这里插入图片描述

我们index 上加入一行代码

private context = getContext(this) as common.UIAbilityContext

定义一个 context 因为后面这个界面很多地方要用 接一个全局的getContext函数 把当前的this 传进去
然后 as 强转一下类型 转成 common.UIAbilityContext 模块的类型
这里 common 需要导一下包

import common from '@ohos.app.ability.common';

在这里插入图片描述
有context就可以做跳转啦
跳转 分三步
第一步就是我们刚刚写完的 获取 context
第二个准备跳转的目的地
第三步就是跳转代码执行

然后 这里 因为我们要测试 specified
所以 我们不能用 Twox 页面 而是要创建一个 新的 Ability
我们还是在 entry模式 下面的 ets目录 右键 选择new 创建一个 Ability出来
在这里插入图片描述
名字的话 我们还是叫 Twox
在这里插入图片描述
然后 直接点击右下角 Finish 创建
在这里插入图片描述
这样 我们这个 Ability就出来了
在这里插入图片描述
有趣的是 你会发现 我们创建的这个 Twox 模块的 入口文件 和 entry 入口文件内容基本就是一样的

但是 我们这里要渲染的不是 pages/Index
在这里插入图片描述
我们要渲染的是 pages目录下的 Twox
在这里插入图片描述
创建好之后 你去看当前模块下的 module.json5
abilities 下面就又多了一条了
在这里插入图片描述
下面 我们创建的这个 Twox Ability launchType 启动模式 我们就要改成 specified
在这里插入图片描述
然后 我们Index.ets
button 点击事假代码编写如下

Button(item).onClick(()=>{//指定跳转位置let want: Want ={deviceId: "",bundleName:"com.example.sediment",moduleName: "entry",abilityName: "Twox",parameters: {instanceKey: item}}//执行跳转this.context.startAbility(want);
})

在这里插入图片描述
要用 Want 先要导包

import Want from '@ohos.app.ability.Want';

在这里插入图片描述
然后 我们声明这个 want 类型是 Want
deviceId是设备id 我们就跳转当前设备 不用理它
然后 bundleName 应用名 我们就是当前应用 这个bundleName在应用下的 AppScope目录下的tapp.json5文件中
在这里插入图片描述
moduleName 模块名
在我们 模块 例如 我们这里模块是 entry
下面的 module.json5 中的 module 下 name 属性 就对应这个模块的名称
在这里插入图片描述
abilityName 要跳转到的Ability module.json5中的 abilities 找到自己要跳转的ability name属性就是这个东西啦
在这里插入图片描述
parameters 中 放一些参数 我们这里 给了个 instanceKey 就是当前触发事件的下标

然后 我们还要来搭一个舞台
我们先在模块下的 ets目录下创建一个文件夹
在这里插入图片描述
名字没有限制 但是规范一点 可以叫 myAbilityStage
在这里插入图片描述
在这个目录下创建一个 TS文件
在这里插入图片描述
这里 名字的话 我就叫 MyAbilityStage 没有硬性要求 最好就是顾名思义 同事和自己一看就懂最好
在这里插入图片描述
编写代码如下

import AbilityStage from '@ohos.app.ability.AbilityStage';
import Want from '@ohos.app.ability.Want';export default class MyAbilityStage  extends AbilityStage {onAcceptWant(want:Want):string {if(want.abilityName ==='Twox'){return `TwoxInstance_${want.parameters.instanceKey}`}return ""}
}

跳转ability 后是先进这里 然后我们判断 如果abilityName 是Twox 要跳 Twox 我们需要特殊处理
其他ability 不管他 直接返回一个空的
如果是 Twox 我们就返回 TwoxInstance_跟我们传的 instanceKey
做一个唯一key标识

当然 我一直在说 名字是随意的 那么 怎么确定要读哪一个舞台呢?
对应模块下的 module.json5 文件
module 下 加一个 srcEntry 它就是指向舞台文件的 配置文件
在这里插入图片描述
然后 我们 pages下的 Twox代码改成这样

import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
@Entry
@Component
struct Twox {private context = getContext(this) as common.UIAbilityContextbuild() {Row() {Column(){Button("返回初始模块").onClick(()=>{//指定跳转位置let want: Want ={deviceId: "",bundleName:"com.example.sediment",moduleName: "entry",abilityName: "EntryAbility",}//执行跳转this.context.startAbility(want);})}.width('100%')}.height('100%')}
}

先追个基本返回初始模块的功能 因为 EntryAbility 是一个但实例模块 不需要参数
在这里插入图片描述
然后 我们真机运行项目

代码运行一切正常 哦 这边我加了个横屏 大家别奇怪
在这里插入图片描述
然后 我们点击 key1

页面就跳转过来了 因为 我们 Twox 没有处理横屏 就还是竖的 哈哈哈
在这里插入图片描述
此时 我们打开任务列表

你会发现 首页跟 这个详情页 是两个任务
在这里插入图片描述
然后 我们再怎么点key 1 它都只有两个任务
因为 这一个key 已经存在 它就不重新创建了
在这里插入图片描述
我们点key2
就又会多一个任务 因为这个key是新的
然后直接 你又再怎么点 它都不会多了
在这里插入图片描述

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

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

相关文章

centos 搭建ftp服务器

项目上需要用到ftp文件服务同步,所以在测试环境进行搭建,其中遇到了一些问题,遂记录。 1、安装vsftpd软件包 打开终端并输入以下命令来安装vsftpd yum install vsftpd -y 2、运行vsftpd systemctl start vsftpd 3、测试匿名连接 我这里…

激光雷达点云数据邻域特征计算理论知识学习

一、数学理论 (一)SVD奇异值分解(Singular value decomposition) 奇异值分解是线性代数中一种重要的矩阵分解,在信号处理、统计学等领域有重要应用。奇异值分解在某些方面与对称矩阵或埃尔米特矩阵基于特征向量的对角…

C 数据类型

在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 C 中的类型可分为以下几种: 序号类型与描述1基本数据类型 它们是算术类型,包括整型…

pytest 教程

1. 安装pytest 目前我使用的python版本是3.10.8 pip install pytest命令会安装下面的包: exceptiongroup-1.2.0-py3-none-any.whl iniconfig-2.0.0-py3-none-any.whl packaging-23.2-py3-none-any.whl pluggy-1.4.0-py3-none-any.whl pytest-8.0.2-py3-none-any.…

web自动化笔记十六:日志收集

日志的作用: -调试程序 -了解系统程序运行情况,是否正常 -系统程序运行故障分析与问题定位 -用来做用户行为分析的数据统计 日志级别:是指日志信息的优先级、重要性或者严重程度 DEBUG:调试级别,…

Kubernetes 外部 HTTP 请求到达 Pod 容器的全过程

文章目录 1、问题一2、HTTP 请求流转过程概述图3、详细过程分析4、容器技术底座5、问题二6、详细过程分析(补充) 1、问题一 当外部发送一个HTTP/HTTPS 请求到Kubernetes 集群时,它是如何达到 Pod 中的 container 的呢? 2、HTTP 请求流转过程概述图 3、…

【论文阅读】(DALLE-3)Improving Image Generation with Better Captions

(DALLE-3)Improving Image Generation with Better Captions 文章目录 (DALLE-3)Improving Image Generation with Better Captions简介Method实验 引用: Betker J, Goh G, Jing L, et al. Improving image generation…

【数据存储】大端存储||小端存储(超详细解析,小白一看就懂!!!)

目录 一、前言 二、什么是低地址、高地址 ? 三、什么是数据的高位和低位 ? 四、什么是大小端存储? 🍉 小端存储详解 🍒 大端存储详解 五、为什么会有大小端存储? 🍍大端存储的优点 &#…

React | 低代码平台开发实践

⭐简单说两句⭐ 作者:后端小知识,CSDN后端领域新星创作者|阿里云专家博主 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 前言 随着数字…

AI绘画丨超酷海盗女孩生成攻略

海盗在许多艺术作品中颠覆了历史上的负面模样,以正面的形象登场,这让许多较为年轻的人们对“海盗”这一职位充满憧憬。那么一个兼具野性与美丽的女性海盗该怎么生成呢?小编就带来了本次的生成关键词! 关键词:pirate g…

文件操作与IO(3) 文件内容的读写——数据流

目录 一、流的概念 二、字节流代码演示 1、InputStream read方法 第一个没有参数的版本: 第二个带有byte数组的版本: 第三个版本 搭配Scanner的使用 2、OutputStream write方法 第一个版本: 第二个写入整个数组版本: …

信号灯——进程通信——day16

今天主要讲一下信号灯,也是有名信号量,一共分为四个步骤:创建、销毁、申请以及释放 首先是创建: semget int semget(key_t key, int nsems, int semflg); 功能:创建一组信号量 参数:key:IPC对象名nsems:信号量的个数semflg:IPC_…

软件测试 - 测试用例基本理论

1. 概念 为了特定的目的(该目的是检验代码是否满足用户需求)而设计的文档,文档包含测试输入、执行条件、预期结果等。文档的形式一般是excel表格。 比如说我们买了一台电脑,新买的笔记本检查完外观之后第一步需要查看电脑是否能够正常开机,…

爬虫案例二

想拿到电影天堂 其中一个下载地址如何实现呢 第一步电影天堂_免费在线观看_迅雷电影下载_电影天堂网 (dytt28.com)电影天堂_电影下载_高清首发 (dytt89.com)电影天堂_免费在线观看_迅雷电影下载_电影天堂网 (dytt28.com) 第一步 我直接打开 requests.exceptions.SSLError: H…

Kubernetes Service

一、Service:Kubernetes 中的服务返现与负载均衡 1、为什么需要服务发现 Pod 生命周期短暂,IP 地址随时变化。 Deployment 等的 Pod 组需要统一访问入口和做负载均衡。 应用间在不同环境部署时保持同样的部署拓扑和访问方式。 2、应用服务如何暴露到…

免费!宝藏网站合集,每一个都不容错过

在科技日新月异的时代,PPT已经成为各行各业必不可少的展示工具。为了帮助大家提升PPT制作技巧,本文将为您介绍几款堪称神秘的PPT制作利器。它们分别是PPT宝库、PPT超级市场、魔法幻灯片以及优品PPT。 优品PPT 简介 优品PPT是一个专注于提供高质量PPT模…

JSP实现数据传递与保存

1.HTML页面转换JSP页面 直接再HTML页面最顶端添加page指令,修改文件后缀名;反之; 2.JSP内置对象 对象 描述 request 每当客户端请求JSP页面时,JSP引擎会制造一个新的request对象来代表这个请求。 response 当服务器创建req…

Linux-信号2

文章目录 前言一、信号是如何保存的?int sigemptyset(sigset_t *set);int sigfillset(sigset_t *set);int sigaddset (sigset_t *set, int signo);int sigdelset(sigset_t *set, int signo);int sigismember(const sigset_t *set, int signo);int sigpen…

VS统计代码行数

1.使用查找和替换方式 按CTRLSHIFTF (Find in files),勾上支持正则表达式, 然后输入搜索内容:^:b*[^:b#/].*$ 如图所示: 2.查看查询结果 需要注意:#开头和/开头或者空行都不计入代码量。

【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑窗口Debug

目录 前言 行断点 条件断点 前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 行断点 当Matlab Function出现异常时,如果能确定大致的代码段,就可以在相应的行上设置一个断点(Breakpoint)&…