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.UIAbilityContext
  build() {
    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是新的
然后直接 你又再怎么点 它都不会多了
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024最新算法:鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)求解23个基准函数(提供MATLAB代码)

一、鳑鲏鱼优化算法 鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)由Lida Zareian 等人于2024年提出。鳑鲏鱼在交配中,雄性和雌性物种相互接近,然后将精子和卵子释放到水中,但这种方法有一个很大的缺…

Linux系统源代码数据防泄密加密软件

数据防泄密系统 是一套从源头上保障数据安全和使用安全的软件系统。包含了文件透明加解密、内部文件流转功能、密级管控、离线管理、文件外发管理、灵活的审批流程、工作模式切换、服务器白名单等功能。从根本上严防信息外泄,保障信息安全。 www.weaem.com 功能介绍…

手写模拟器,解放双手!效果炸裂的生产工具

手写模拟器是一款基于Handright的仿手写图片生成软件,可以让你的电脑和手机也能写出漂亮的手写字,你只需要输入你想要写的内容,选择你喜欢的字体和背景,就可以生成一张高仿真的手写图片,用于各种场合,比如做…

CloudCompare使用-点云手动分割操作

点云手动分割操作 一、概述二、分割步骤1. 点击分割按钮2. 分割标题栏 一、概述 我们有时候需要对点云进行局部分割,就想对下面这个四棱锥和立方体的组合体给分离出来。 分离的效果如下: 二、分割步骤 1. 点击分割按钮 有两个入口 1. 菜单栏 2. 快…

如何根据玩家数量和游戏需求选择最合适的服务器配置?

根据玩家数量和游戏需求选择最合适的服务器配置,首先需要考虑游戏的类型、玩家数量、预计的在线时间以及对内存和CPU性能的需求综合考虑。对于大型多人在线游戏,如MMORPG或MOBA等,由于需要更多的CPU核心数来支持更复杂的游戏逻辑和处理大量数…

k8s-001-Centos7内核升级

1. 查看内核 [rootlocalhost ~]# uname -a 2. 执行的命令(安装最新版内核): 下载: rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 安装: rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm ( 查看最新版内核&…

深度学习的onnx模型插入新节点构建新模型

import numpy as np import onnx import onnxruntime import onnxruntime.backend as backendmodel onnx.load(test.onnx) node model.graph.node graph model.graph# 1.2搜索目标节点 # for i in range(len(node)): # if node[i].op_type Conv: # node_rise …

Java中的图数据库应用:Neo4j入门

第1章:引言 在数据驱动的时代,咱们处理的不仅仅是数字和文本,还有复杂的关系和网络。想象一下社交网络中人与人之间错综复杂的联系,或者是互联网上网页之间的链接关系,传统的表格数据库已经难以高效地处理这些关系密集…

Linux-基础命令(黑马学习笔记)

Linux的目录结构 Linux的目录结构 Linux的目录结构是一个树形结构 Windows系统可以拥有多个盘符,如C盘、D盘、E盘 Linux没有盘符这个概念,只有一个根目录 /,所有文件都在它下面 Linux路径的描述方式 ● 在Linux系统中,路径之…

抖音视频批量下载软件|视频评论采集工具

抖音视频评论采集软件是一款基于C#开发的高效、便捷的工具,旨在为用户提供全面的数据采集和分析服务。用户可以通过关键词搜索抓取视频数据,也可以通过分享链接进行单个视频的抓取和下载,从而轻松获取抖音视频评论数据。 批量视频提取模块&a…

Java中使用poi+poi-tl实现根据模板导出word文档

场景 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出: 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出_若依导出前端获得到后端的execl流之后怎么操作-CSDN博客 上面讲的是Excel的导出,如果是需要根据w…

基于SpringBoot多模块项目引入其他模块时@Autowired无法注入

基于SpringBoot多模块项目引入其他模块时Autowired无法注入 一、问题描述1、解决方案 一、问题描述 启动Spring Boot项目时报 Could not autowire. No beans of ‘xxxxxxxx’ type found. 没有找到bean的实例,即spring没有实例化对象,也就无法根据配置文…

python-基础篇-运算-常见案例

文章目录 出租车车费计价牛顿第二定律虚过多少秒将港珠澳大桥的全长转换成中国古代的丈、尺表示出来 出租车车费计价 import math distance int(input("请输入运行里程数:")) print("本次运行公里数为:\033[31;0m", distance, &qu…

13. Springboot集成Protobuf

目录 1、前言 2、Protobuf简介 2.1、核心思想 2.2、Protobuf是如何工作的? 2.3、如何使用 Protoc 生成代码? 3、Springboot集成 3.1、引入依赖 3.2、定义Proto文件 3.3、Protobuf生成Java代码 3.4、配置Protobuf的序列化和反序列化 3.5、定义…

聊聊 HTTP 性能优化

作为用户的我们在 "上网冲浪" 的时候总是希望快一点,尤其是抢演唱会门票的时候,但是现实并非如此,有时候我们会遇到页面加载缓慢、响应延迟的情况。 而 HTTP 协议作为互联网世界的基础,从网站打开速度到移动应用的响应…

已经淘汰的电脑只能换不锈钢盆了吗?不!你可以换个流畅的系统试试

前言 昨天已经给小伙伴们讲解了,在硬件看起来还不错的情况下,如何自查自行升级电脑硬件,以达到流畅使用Windows10系统的标准。 硬件自查自纠!十年前的电脑可能还可以再战十年 如果可以,谁都不想把Windows系统更换成…

STM32F4 HAL库串口死锁问题调试记录

文章目录 STM32F4 HAL库串口死锁问题调试记录调试方法结果分析解决方法一:方法二: STM32F4 HAL库串口死锁问题调试记录 使用方法:通过串口DMA固定周期向外发送数据,同时开启串口DMA接收用于接收其它板卡发来的数据。 问题&#x…

蜘蛛蜂优化算法SWO求解不闭合SD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)

1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有搜索速度快,求解精度高的优势。VRPTW&#x…

鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

“2024年是原生鸿蒙的关键一年,我们要加快推进各类鸿蒙原生应用的开发,集中打赢技术底座和三方生态两大最艰巨的战斗。”这是余承东在新年信中表达的决心。 随后在1月18日举行的鸿蒙生态千帆启航仪式上,华为宣布 HarmonyOS NEXT 鸿蒙星河版系…

Python用函数实现代码复用

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 生命对某些人来说是美丽的&#xff0c…