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

news2024/9/23 5:24:28

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

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

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

相关文章

就业班 2401--2.29 Linux Day8--存储管理2(LVM)+swap+磁盘阵列raid

!!!!!!小伙伴们一定要看到最后,有彩蛋呢^--^ 一、存储管理Ⅱ 逻辑卷LVM (Logical Volume Manager(逻辑卷管理)的简写) LVM管理 lvm概念&#xf…

即时设计案例分享: 网页设计案例解析

优秀的网页设计案例可以帮助设计快速完成设计项目,优秀的网页设计网站也是设计师的灵感电站。网页承载着品牌希望向访问者传递的信息。当用户进入网站时,人们对网站的第一印象开始潜移默化地形成。因此,优秀的网页设计非常重要,这…

uniapp问卷调查(单选)

前言 该代码片段只支持问卷调查的单选功能 使用组件库 配置 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 (uviewui.com) 代码 <template> <view> <view v-for"(item, index) in radiolist1" :key"index"> …

LeetCode --- 无重复字符的最长子串

题目描述 无重复字符的最长子串 找到无重复的最长连续字符串。 示例1中 abc | bca | cab 都符合题意。输出3即可。 代码 可以使用暴力枚举 哈希表&#xff0c;哈希表来判断是否重复&#xff0c;枚举来判断每一种情况&#xff0c;需要开两层for循环&#xff0c;时间复杂度n…

Linux --- 应用层 | HTTP | HTTPS

前言 前面写的TCP/UDP客户端在访问服务端的时候&#xff0c;需要输入ip地址和端口号才可以访问&#xff0c; 但在现实中&#xff0c;我们访问一个网站是直接输入的一个域名&#xff0c;而不是使用的ip地址端口号。 比如在访问百度 https://www.baidu.com/的时候&#xff0c; …

操作系统|概述|系统分类——笔记

1.1_1操作系统的概念和功能 操作系统的概念 操作系统&#xff08;Operating System&#xff0c; OS&#xff09; 是指控制和管理整个计算机系统的 硬件和软件 资源&#xff0c;并合理地组织调度计算机和工作和资源的分配&#xff1b; 1操作系统是系统资源的管理者 以提供给用…

Springboot 过滤器、拦截器、全局异常处理

Springboot 过滤器、拦截器、全局异常处理 一 过滤器&#xff08;Filter&#xff09; 过滤器是JavaWeb三大组件&#xff08;Servlet&#xff0c;Filter&#xff0c;Listener&#xff09;之一。 Filter可以把对资源的请求拦截下来&#xff0c;从而实现一些功能。 注意&#…

罐头食品加工污废水需要哪些工艺设备

罐头食品加工是目前广泛应用于食品行业的一种加工方式&#xff0c;由于其加工过程中产生的废水所含有的有机物质和化学物质含量较高&#xff0c;对环境造成了一定的污染问题。为了解决这一问题&#xff0c;罐头食品加工污废水需要采用一系列的工艺设备进行处理和净化。 首先&am…

技术实践|百度安全「大模型内容安全」高级攻击风险评测

1、引子 2023年10月16日&#xff0c;OWASP发布了《OWASP Top 10 for LLM Applications》&#xff0c;这对于新兴的大语言模型安全领域&#xff0c;可谓一份纲领性的重要报告。 OWASP是开放式Web应用程序安全项目&#xff08;Open Web Application Security Project&#xff0…

Mysql运维篇(七) 部署MHA--完结

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 一、MHA软件构成 Manager工具包主要包括以下几个工具&#xff1a; masterha_manger 启…

【直播来袭】威睿电池:车载ECU网络安全开发落地开发实践|谈思AutoSec直播课第42期

如果恶意黑客导致动力总成和底盘ECU出现问题&#xff0c;你会感到害怕甚至不敢想。车辆电气系统中的所有ECU都可能成为目标。更不用说互联车辆了。为了防止软件被未经授权的操作或访问至关重要的关键材料&#xff0c;现代车辆需要强大的IT安全机制来与外界隔离。 由于汽车智能…

.md转pdf

1、使用vscode安装Markdown PDF Markdown PDF 打开预览转pdf,同目录下自动生成pdf文件

中科大计网学习记录笔记(十七):拥塞控制原理 | TCP 拥塞控制

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

VulnHub打靶记录——Socnet

靶机下载地址&#xff1a;https://www.vulnhub.com/entry/boredhackerblog-social-network,454/ 将靶机设置为NAT模式并启动。 主机发现&信息收集 靶机和 kali 在同一网段&#xff0c;使用nmap扫描网段主机&#xff0c; nmap 192.168.50.1/24其中192.168.50.130是本机&…

UV画贴图时如何去掉一部分

1.纹理先选psd 2. altshift 把要去掉的中选中 选择几何体-隐藏选择

图像增强技术总结

最近科研需要改进算法&#xff0c;需要先对图像进行增强后处理&#xff0c;所以对图像增强技术做一个总结。图像增强的目的就是要提高图像的质量&#xff0c;在图像处理中&#xff0c;有两种提高图像质量的方法&#xff1a;一是图像在采集的过程中&#xff0c;知道图像质量降低…

春招!启动了

大家好&#xff0c;我是洋子。今年的春招很多企业已经开始招聘了&#xff0c;像美团今年继续发力&#xff0c;24届春招以及25届暑期转正实习一共招聘4000人。另外&#xff0c;阿里&#xff0c;京东&#xff0c;顺丰等公司也已经开始春招&#xff0c;可以说招聘的号角已经正式吹…

C语言——指针的进阶——第1篇——(第26篇)

坚持就是胜利 文章目录 一、字符指针1、面试题 二、指针数组三、数组指针1、数组指针的定义2、&数组名 VS 数组名3、数组指针的使用&#xff08;1&#xff09;二维数组传参&#xff0c;形参是 二维数组 的形式&#xff08;2&#xff09;二维数组传参&#xff0c;形参是 指针…

Redis高可用性【重点】

参考链接 https://xiaolincoding.com/redis/cluster/master_slave_replication.html#%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%90%8C%E6%AD%A5 高可用性 主从复制哨兵节点 主从复制 【面试题】 Redis主从节点时长连接还是短连接&#xff1f; 长连接 #怎么判断 Redis 某个节点是否正常…

【C++从练气到飞升】01---C++入门

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 推荐 前言 什么是C C的发展史 &#x1f4cb;命名空间 命名空间定义 命名空间使用 命名空间的嵌套 std命名空间的使用 &#…