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、测试匿名连接 我这里…

Vue组件间通信实践

Vue组件间通信实践 🌟 前言 欢迎来到我的小天地,这里是我记录技术点滴、分享学习心得的地方。📚 🛠️ 技能清单 编程语言:Java、C、C、Python、Go、前端技术:Jquery、Vue.js、React、uni-app、EchartsUI设…

蓝桥杯每日一题(二分)

//1460 我在哪 暴力方法改了40分钟,好在ac了 思路:依次枚举所有字符(外层循环); 第一个没有注意的点:没有加j的中间那层循环,直接用的while,这样会导致i后面可能有多个j的位置与i…

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

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

Java学习笔记007——接口的应用

1、接口的转换(向下) 子类对向和父类对象可以进行类型转化。接口也一样可以。 package com.test;// 接口Animal public interface Animal {void bark(); //等价于public abstract void bark();void move(); //等价于public abstract void move(); }pac…

Spring总结之构造注入

构造注入&#xff1a; Spring调用类的有参构造&#xff0c;在构造方法中给属性赋值 构造注入使用的是<constructor-arg>标签&#xff0c;一个<constructor-arg>标签表示构造方法的一个参数。 <constructor-arg>标签属性&#xff1a; name&#xff1a;表示构…

C 数据类型

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

pytest 教程

1. 安装pytest 目前我使用的python版本是3.10.8 pip install pytest命令会安装下面的包&#xff1a; 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.…

线性代数笔记10--矩阵的四个基本子空间

0. 引入 矩阵 A m n A_{m \times n} Amn​ 1. 列空间 C ( A ) C(A) C(A)在 R m R^m Rm中 d i m ( C ( A ) ) p i v o t _ c o l u m n _ c n t r a n k ( A ) r dim(C(A))pivot\_column\_cnt rank(A)r dim(C(A))pivot_column_cntrank(A)r 2. 零空间 N ( A ) N(A) N(A)…

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

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

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

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

Scrapy与分布式开发(2.8):布隆过滤器原理及应用

布隆过滤器原理及应用 定义 布隆过滤器&#xff08;Bloom Filter&#xff09; 是一种空间效率极高的概率型数据结构&#xff0c;用于测试一个元素是否在一个集合中。它的优点是空间效率和查询时间都远超过一般的算法&#xff0c;缺点是有一定的误识别率和删除困难。 原理 布…

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

&#xff08;DALLE-3&#xff09;Improving Image Generation with Better Captions 文章目录 &#xff08;DALLE-3&#xff09;Improving Image Generation with Better Captions简介Method实验 引用&#xff1a; Betker J, Goh G, Jing L, et al. Improving image generation…

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

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

React | 低代码平台开发实践

⭐简单说两句⭐ 作者&#xff1a;后端小知识&#xff0c;CSDN后端领域新星创作者|阿里云专家博主 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 前言 随着数字…

构造函数:初始化列表 篇

前言&#xff1a;为什么会出现初始化列表这个功能&#xff1f; 在学习初始化列表之前&#xff0c;我们通常在构造函数中为函数赋初值&#xff0c;但这行为并不能称为初始化。因为初始化具有唯一性&#xff0c;只能初始化一次&#xff0c;而构造函数体内可以多次赋值。因此我们…

[蓝桥杯 2020 省 B1] 整除序列

[蓝桥杯 2020 省 B1] 整除序列 题目描述 有一个序列&#xff0c;序列的第一个数是 n n n&#xff0c;后面的每个数是前一个数整除 2 2 2&#xff0c;请输出这个序列中值为正数的项。 输入格式 输入一行包含一个整数 n n n。 输出格式 输出一行&#xff0c;包含多个整数…

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

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

在pytorch中利用GPU训练神经网络时代码的执行顺序并提高训练效率

在pytorch中利用GPU训练神经网络时代码的执行顺序并提高训练效率 在 PyTorch 中&#xff0c;大多数操作在 GPU 上默认是异步执行的&#xff0c;但这并不意味着它们是并行执行的。要理解代码是同步还是异步执行&#xff0c;以及是串行还是并行执行&#xff0c;我们需要考虑几个…

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

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