【HarmonyOS】鸿蒙开发之Stage模型-UIAbility的启动模式——第4.4章

UIAbility的启动模式简介

一共有四种:singleton,standard,specified,multion。在项目目录的:src/main/module.json5。默认开启模式为singleton(单例模式)。如下图
在这里插入图片描述

singleton(单实例模式)启动模式

每个UIAbility只存在唯一实例。任务列表中只会存在一个相同的UIAbility (会覆盖上一个实例)

代码实例:

{"module": {..."abilities": [{"launchType": "singleton",...}]}
}

standard(标准实例模式)启动模式

每次启动UIAbility都会创建一个新的实例。在任务列表中可能存在一个或多个相同的UIAbility实例。新实例创建后,旧实例依然存在。
好处:实现多开效果

代码实例:

{"module": {..."abilities": [{"launchType": "standard",...}]}
}

multion (多实例模式) 启动模式

每次启动UIAbility都会创建一个新的实例。新实例创建后,旧实例会被移除。
场景: 用户在使用分屏功能时,希望使用两个不同应用(例如备忘录应用和图库应用)之间进行分屏,也希望能使用同一个应用(例如备忘录应用自身)进行分屏。

代码实例:

{"module": {..."abilities": [{"launchType": "multion",...}]}
}

specified(指定实例模式)启动模式

每个UIAbility实例可以设置Key指示。启动UIAbility时,需要制定key,存在key相同实例直接被拉起,不存在则创建新实例

场景: 用户打开文档应用,从文档应用中打开一个文档内容,回到文档应用,继续打开同一个文档,希望打开的还是同一个文档内容;以及在文档应用中新建一个新的文档,每次新建文档,希望打开的都是一个新的空白文档内容。

  1. 第一步:创建新的ability,修改module.json5配置文件
    1.1 在ets文件加载创建新的ability,名字为testAbility
    在这里插入图片描述
    ets多出testAbility文件夹和文件(后续需用用到testAbility文件进行修改)
    在这里插入图片描述

    1.2 创建为后,module.json5文件的module->abilities会多出一个testAbility对象。并修改module.json5配置文件
    在这里插入图片描述

{"module": {..."abilities": [...,{"name": "testAbility","srcEntry": "./ets/testability/testAbility.ts","description": "$string:testAbility_desc","icon": "$media:icon","label": "$string:testAbility_label","startWindowIcon": "$media:icon","startWindowBackground": "$color:start_window_background","launchType": "specified",}]}
}
  1. 第二步:specified启动模式实例代码
    2.1 当前UIAbility调用startAbility方法拉起目标UIAbility
    实例代码:
@Entry
@Component
export struct UiAbilityStartMode{//1.1 获取上下文private context = getContext(this) as common.UIAbilityContext;handleStartAbilityTest(id:number) {//1.2 指定要跳转到的UIAbility的信息let want:Want = {deviceId: '', // deviceId为空表示本设备bundleName: 'com.example.myapplication',abilityName: 'testAbility',//ability的名称  去项目module.json5文件里的module.abilities.namemoduleName: 'entry', // 模块名 去项目module.json5文件里的module.nameparameters: { //参数instanceKey: "id_"+id,//UIAbility实例的key},}//1.3 尝试拉起目标UIAbility实例this.context.startAbility(want);}@State num:number[]=[1,2]@State curNum:number=1build(){Column(){TitleBar({titleBarAttribute:{title:"UIAbility启动模式",backShow:true,backCallback:()=>{router.back()}},}){}Column(){Column(){Text("specified启动模式").fontSize(26).margin({bottom:10})Button("添加文件").onClick(()=>{let numData = this.curNum++this.num.push(numData)this.handleStartAbilityTest(numData)})Column(){ForEach(this.num,(item,index) => {Row(){Row(){Image($r("app.media.csdn")).width(26).margin({right:10})Text("文档-"+item).fontColor(Color.White)}Text("查看文档").fontColor(Color.White)}.borderRadius(10).margin({bottom:10}).padding(10).backgroundColor("#409eff").width("90%").justifyContent(FlexAlign.SpaceBetween).onClick(()=>{this.handleStartAbilityTest(item)})})}.margin({top:20})}}.justifyContent(FlexAlign.Center).height("100%")}}
}

运行结果:
在这里插入图片描述
文档页面页面代码如下:

//文档页面
@Entry
@Component
export struct DocPage{//1.1 获取上下文private context = getContext(this) as common.UIAbilityContext;handleStartAbilityTest() {//1.2 指定要跳转到的UIAbility的信息let want:Want = {deviceId: '', // deviceId为空表示本设备bundleName: 'com.example.myapplication',abilityName: 'EntryAbility',//ability的名称  去项目module.json5文件里的module.abilities.namemoduleName: 'entry', // 模块名 去项目module.json5文件里的module.name}//1.3 尝试拉起目标UIAbility实例this.context.startAbility(want);}build(){Column(){Text("你成功了")Button("返回").onClick(()=>{this.handleStartAbilityTest()})}.justifyContent(FlexAlign.Center).height("100%")}
}
  1. 第三步:为目标UIAbility实例生成唯一key
    3.1 在AbilityStage的生命周期回调中,为目标UIAbility实例生成唯一key。
    在ets下创建abilityStage文件夹和文件,获取UIAbility实例key值
    在这里插入图片描述
    代码实例
import AbilityStage from '@ohos.app.ability.AbilityStage';
import Want from '@ohos.app.ability.Want';//获取UIAbility实例对应的一个Key值
export default class MyAbilityStage extends AbilityStage {onAcceptWant(want:Want): string {// 在被调用方的AbilityStage中,针对启动模式为specified的UIAbility返回一个UIAbility实例对应的一个Key值// 判断当前拉取的ability名称是否为testAbilityif (want.abilityName === 'testAbility') {// 返回的字符串Key标识为自定义拼接的字符串内容return `AbilityInstanceKey_${want.parameters.instanceKey}`;}return '';}
}

还需要在module.json5配置文件编辑srcEntry文件路劲(填写你自己的abilityStage.ets文件路径),才能获取key值。
在这里插入图片描述
4. 第四步:修改testability.ts的加载路径为文档页面
在这里插入图片描述

最后重启,点击文档,就能创建不同key的UIAbility实例

踩坑不易,还希望各位大佬支持一下 \textcolor{gray}{踩坑不易,还希望各位大佬支持一下} 踩坑不易,还希望各位大佬支持一下

📃 个人主页: \textcolor{green}{个人主页:} 个人主页: 沉默小管

📃 个人网站: \textcolor{green}{个人网站:} 个人网站: 沉默小管

📃 个人导航网站: \textcolor{green}{个人导航网站:} 个人导航网站: 沉默小管导航网

📃 我的开源项目: \textcolor{green}{我的开源项目:} 我的开源项目: vueCms.cn

🔥 技术交流 Q Q 群: 837051545 \textcolor{green}{技术交流QQ群:837051545} 技术交流QQ群:837051545

👍 点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

如果有不懂可以留言,我看到了应该会回复
如有错误,请多多指教

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

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

相关文章

动态内存经典笔试题分析

题目1: void GetMemory(char *p) { *p (char *)malloc(100); } void Test(void) { char *str NULL; GetMemory(str); strcpy(str, "hello world"); 对NULL指针解引用操作符程序崩溃。 printf(str); } 请问运行Test函数会有什么样的后果? G…

温室气体排放控制中的DNDC模型建模技术及双碳应用

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到,要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时,提到要把减污降碳协同增效作为促…

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

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

离散数学例题——4.计数和集合论(特殊关系、计数基础和函数)

等价关系 等价关系的证明 等价类和商集 等价关系与划分一一对应 偏序关系 证明偏序关系 哈斯图 整除关系画哈斯图 特殊元素 最大最小元,极大极小元 上界上确界,下界下确界 其他关系 全序关系、良序关系 拟序关系、相容关系 计数基础 排列组合 函数定义…

Chromium内核浏览器编译记(四)Linux版本CEF编译

转载请注明出处:https://blog.csdn.net/kong_gu_you_lan/article/details/136508294 本文出自 容华谢后的博客 0.写在前面 本篇文章是用来记录编译Linux版本CEF的步骤和踩过的坑,以防止后续再用到的时候忘记,同时也希望能够帮助到遇到同样问…

离散数学例题——5.图论基础

基本的图 关联矩阵 子图和补图 度数和握手定理 注意!!!无向图的度数,要行/列和对角线值 根据度数序列判定是否为无向图 度和握手定理证明题 竞赛图 同构图 自补图 通路和回路数量 通路和回路数量 最短路径——dijkstra算法 连通…

[数据结构初阶]队列

鼠鼠我呀,今天写一个基于C语言关于队列的博客,如果有兴趣的读者老爷可以抽空看看,很希望的到各位老爷观点和点评捏! 在此今日,也祝各位小姐姐女生节快乐啊,愿笑容依旧灿烂如初阳,勇气与童真永不…

【HTML】HTML基础7.2(有序列表)

目录 标签 效果 注意 标签 <ol> <li>列表内容</li> <li>列表内容</li> <li>列表内容</li> <li>列表内容</li> 。。。。。。 </ol> 效果 代码 <ol><li>银河护卫队 10000000000</li><l…

RUST 每日一省:发布到crates.io

github是开源代码分享的地方&#xff0c;rust的开源项目除了github&#xff0c;我们还可以将其发布到 crates.io 上&#xff0c;然后其它用户就可以使用cargo进行安装使用了。其实步骤很简单&#xff0c;只有三条命令了&#xff0c;我们一次来看一下。 1、cargo package 首先&a…

Threejs着色器(GPU)编程——感温管网

管网,作为支撑现代城市运转的重要基础设施,是隐藏在地面之下的庞大工程网络。这些管网如同城市的血脉,负责输送各种必要的资源,如水源、热力、燃气等,同时排除废水和其他废弃物。然而,由于其位于地下,人们往往难以直接感知其存在和运行状态。为了保障这些地下管网的安全…

Go编程实战:高效利用encoding/binary进行数据编解码

Go编程实战&#xff1a;高效利用encoding/binary进行数据编解码 引言encoding/binary 包核心概念ByteOrder 接口Binary 数据类型的处理处理复杂数据结构 基础使用教程数据类型与二进制格式的映射基本读写操作写操作 - binary.Write读操作 - binary.Read 错误处理 高级功能与技巧…

手机备忘录可以设置密码吗 能锁屏加密的备忘录

在繁忙的生活中&#xff0c;手机备忘录成了我随身携带的“小秘书”。那些关于工作的灵感、生活的琐事&#xff0c;甚至深藏心底的小秘密&#xff0c;都被我一一记录在里面。然而&#xff0c;每次当手机离开我的视线&#xff0c;或者需要借给他人使用时&#xff0c;我总会心生担…

Vue+SpringBoot打造校园疫情防控管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、系统展示四、核心代码4.1 新增健康情况上报4.2 查询健康咨询4.3 新增离返校申请4.4 查询防疫物资4.5 查询防控宣传数据 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBoot…

力扣刷题Days12第二题--100相同的树(js)

目录 1,题目 2&#xff0c;代码 2.1深度优先遍历 2.2广度优先遍历 3&#xff0c;学习与总结 1,题目 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是…

数字孪生10个技术栈:数据处理的六步骤,以获得可靠数据。

一、什么是数据处理 在数字孪生中&#xff0c;数据处理是指对采集到的实时或历史数据进行整理、清洗、分析和转化的过程。数据处理是数字孪生的基础&#xff0c;它将原始数据转化为有意义的信息&#xff0c;用于模型构建、仿真和决策支持。 数据处理是为了提高数据质量、整合数…

ElasticSearch之通过search after和scroll解决深度分页问题

写在前面 通过from&#xff0c;size来进行分页查询时&#xff0c;如下&#xff1a; 当from比较大时会有深度分页问题&#xff0c;问题产生的核心是coordinate node需要从每个分片中获取fromsize条数据&#xff0c;当from比较大&#xff0c;整体需要获取的数据量也会比较大&am…

阿珊解析Vuex:实现状态管理的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

[c++] c++ 中的顺序(构造,析构,初始化列表,继承)

对象构造的时候&#xff0c;对象成员变量的初始化顺序是什么样的 &#xff1f; 派生类构造的时候&#xff0c;先构造基类还是先构造派生类 &#xff1f; 构造函数中的初始化列表&#xff0c;初始化的顺序是列表的顺序吗 &#xff1f; 析构的时候&#xff0c;析构的顺序是什么…

静态时序分析:典型与非典型时序路径的约束详解(一)

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 时序路径是静态时序分析中的一个重要概念&#xff0c;了解时序路径能帮助设计者更好地编写SDC脚本&#xff0c;本文旨在详细介绍时序路径相关内容。 首先给出时序…

【重制版】WSDM 2024 2023时空时序论文总结

&#x1f31f;【紧跟前沿】“时空探索之旅”与你一起探索时空奥秘&#xff01;&#x1f680; 欢迎大家关注时空探索之旅 WSDM 2024于2024年3月4日-3月8日在墨西哥梅里达&#xff08;Mrida, Mxico&#xff09;正在举行。目前官网已经放出了所有被录用论文的表单&#xff08;链接…