【HarmonyOS】Stage 模型 - UIAbility 的启动模式

Stage 模型这样的应用,它在启动的时候会先准备 Ability Stage 舞台,接着呢,就可以基于它去创建 UIAbility 的实例,并去启动它。

UIAbility 组件启动模式 有四种:

  • singleton
  • standard
  • multiton
  • specified

修改模块的 module.json5 来改变启动模式:

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

一、singleton 启动模式

👉 官方文档

singleton 是单实例的意思,所以这种模式对应的 UIAbility 不管你给它启动多少次,它只会存在唯一的实例。事实上,我们的应用默认 Ability 都是这种模式。

UIAbility 的实例其实对应到操作系统任务列表中的一个任务。所以,如果你的 Ability 是 singleton 这种模式,不管启动多少次,去查看手机的任务列表,会发现这个 Ability 在任务列表中只会存在一个任务。


运行日志:

  1. 点击图标启动 app:

    Ability onCreate
    Ability onWindowStageCreate
    Ability onForeground
    
  2. 点击 Home 回到桌面:

    Ability onBackground
    
  3. 再次点击图标启动 app:

    Ability onForeground
    

二、standard、multiton 启动模式

👉 官方文档

在官网上管 standard 模式叫 multiton 模式,但是经过测试,这两种模式是不一样的。但是这两个模式又非常接近,这两种模式在每次启动 UIAbility 时都会创建一个新实例。

在 standard 模式当中,创建一个新的实例,之前那个旧的实例也会存在,也就是多个实例并存;而 multiton 模式则不一样,它在每次创建一个新实例,旧的实例则会被移除。

对于 standard 模式来讲,每创建一个新的实例,都会存在,那是不是意味着同一个 Ability 它的多个实例是并存的。因此在任务列表中会发现一个 Ability 可能会存在一个或多个任务。


multiton 运行日志:

  1. 点击图标启动 app:

    Ability onCreate
    Ability onWindowStageCreate
    Ability onForeground
    
  2. 点击 Home 回到桌面:

    Ability onBackground
    
  3. 再次点击图标启动 app:

    Ability onCreate
    Ability onWindowStageCreate
    Ability onForeground
    
  4. 点击任务列表

    发现 App 只存在一个实例
    

standard 运行日志:

  1. 点击图标启动 app:

    Ability onCreate
    Ability onWindowStageCreate
    Ability onForeground
    
  2. 点击 Home 回到桌面:

    Ability onBackground
    
  3. 再次点击图标启动 app:

    Ability onCreate
    Ability onWindowStageCreate
    Ability onForeground
    
  4. 点击任务列表

    发现 App 存在两个实例
    

三、specified 启动模式

👉 官方文档

specified 顾名思义就是指定的意思,在使用这种模式时,启动一个 UIAbility 时是需要指定一个 key,这个 key 会作为 UIAbility 实例的一个唯一标识。

所以,当启动时,会先看一下指定的这个 key 对应的 UIAbility 是否存在。如果不存在,就会创建一个新的 UIAbility 实例,然后把这个 key 作为这个实例的标识,下次再启动 UIAbility 时,还需要指定 key,还需要判断这个 key 对应的实例是否已经存在。如果已经存在,就可以直接把它唤醒,不用重新创建。

这种模式和 standard 模式有点像,就是一个 Ability 会存在多个实例,但是呢又不一样,在创建实例时可以指定 key,key 不存在才需要创建,key 存在就不用重复创建了,这样就可以快速的找到以前创建好的实例。

当前 UIAbility 调用 startAbility 方法拉起目标 UIAbility:

// 获取上下文
context = getContext(this) as common.UIAbilityContext// 指定要跳转到 UIAbility 的信息
let want = {deviceId: '',bundleName: 'com.tyhoo.hmos.myapplication',abilityName: 'TestAbility',moduleName: 'entry',parameters: {instanceKey: this.getInstanceKey()}
}// 尝试拉起目标 UIAbility 实例
this.context.startAbility(want)
  • 调用一个全局的 getContext 方法,来获取 UIAbilityContext 的上下文对象。

  • 拿到上下文之后,可以调用它的 startAbility 方法,从而来去拉起一个目标的 UIAbility,或者说把它的实例给创建好。

  • 传入参数 want 来告诉具体拉起哪个实例。

    • deviceId:设备信息。如果什么都不传,代表的是本设备。
    • bundleName:包名/应用名。它是设备的唯一标识。
    • abilityName:目标 UIAbility 的名称。
    • moduleName:模块名。调用的 Ability 在哪个模块。
    • parameters:参数。

在 AbilityStage 的生命周期回调中为目标 UIAbility 实例生成 key:

export default class MyAbilityStage extends AbilityStage {onAcceptWant(want: Want): string {if (want.abilityName === 'TestAbility') {return `TestAbility_${want.parameters.instanceKey}`}return '';}
}

在 module.json5 配置文件中,通过 srcEntry 参数指定 AbilityStage 路径:

{"module": {..."srcEntry": "./ets/myabilitystage/MyAbilityStage.ts"}
}

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

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

相关文章

SSMP整合案例第五步 在前端页面上拿到service层调数据库里的数据后列表

在前端页面上列表 我们首先看看前端页面 我们已经把数据传入前端控制台 再看看我们的代码是怎么写的 我们展示 数据来自图dataList 在这里 我们要把数据填进去 就能展示在前端页面上 用的是前端数据双向绑定 axios发送异步请求 函数 //钩子函数,VUE对象初始化…

【四大组件】-- 活动 Activity

目录 活动活动是什么活动的相关操作手动创建活动活动中使用Toast活动中使用Menu销毁一个活动 使用Intent实现活动间启动显示启动隐式启动 活动间数据传递活动的生命周期返回栈活动的状态活动的生存期 活动的启动流程活动的回收和重建如何在活动销毁前保存状态 活动的启动模式st…

设计模式(十四)行为型模式---访问者模式(visitor)

文章目录 访问者模式简介分派的分类什么是双分派?结构UML图具体实现UML图代码实现 优缺点 访问者模式简介 访问者模式(visitor pattern)是封装一些作用于某种数据结构中的元素的操作,它可以在不改变这个数据结构(实现…

红队内网攻防渗透:内网渗透之windows内网权限提升技术:手工篇

红队内网攻防渗透 1. 内网权限提升技术1.1 windows内网权限提升技术--手工篇1.1.1 Web到Win-系统提权-人工操作1.1.1.1 信息收集1.1.1.2 补丁筛选1.1.1.3 EXP获取执行1.1.2 Web到Win-系统提权-土豆家族1.1.2.1 Test in:Windows 10/11(1809/21H2)1.1.2.2 Test in:Windows Se…

全新市场阶段,Partisia BlockChain 将向 RWA、DeFi 等领域布局

Partisia Blockchain 是一个全新范式的 Layer1,该链通过 MPC 方案来构建链上隐私方案,同时该链通过系列独特且创新的设计,旨在进一步解决目前 Web3 中所面临的不可能三角问题,包括安全性、互操作性和可扩展性,为更多的…

NTFS磁盘格式读写工具:Tuxera NTFS 2021 for Mac

Tuxera NTFS 是一款用于 macOS 系统的 NTFS 文件系统驱动程序。NTFS 是 Windows 系统中常用的文件系统,而 macOS 默认只支持读取 NTFS 格式的磁盘,不能进行写入操作。因此,如果你需要在 macOS 上进行 NTFS 磁盘的写入操作,就需要安…

提交一个Bug需要哪些信息?

软件在使用过程中存在的任何问题都叫做软件的缺陷,简称Bug,我认为要提交一个Bug首先得将这个Bug的核心内容说明一下,比如Bug的核心问题是什么、产生的前提、预期结果是什么、但实际结果是什么、以及附上一个证据图片。 然后提交时需要Bug报告…

【一刷《剑指Offer》】面试题 28:字符串的排列

牛客对应题目链接:字符串的排列_牛客题霸_牛客网 (nowcoder.com) 力扣对应题目链接:LCR 157. 套餐内商品的排列顺序 - 力扣(LeetCode) 核心考点 :全排列问题, DFS。 一、《剑指Offer》对应内容 二、分析题…

JS(DOM、事件)

DOM 概念:Document Object Model,文档对象模型。将标记语言的各个组成部分封装为对应的对象: Document:整个文档对象Element:元素对象Attribute:属性对象Text:文本对象Comment:注释对象 JavaScript通过DOM,就能够对HTML进行操作: 改变 HTML 元素的内…

Windows端口本地转发

参考 微软Netsh interface portproxy 命令 界面端口代理的 Netsh 命令 | Microsoft Learn 使用Windows系统的portproxy功能配置端口转发 使用Windows系统的portproxy功能配置端口转发-阿里云帮助中心 (aliyun.com) 将来自0.0.0.0地址对端口35623的访问转发到172.18.106.16…

SpringBoot @ModelAttribute注解的深入指南

文章目录 前言一、基本概念二、方法级别的@ModelAttribute1. 用途2. 示例三、参数级别的@ModelAttribute1. 用途2. 示例四、处理多个@ModelAttribute1. 示例五、继承与@ModelAttribute注解的结合使用1. 示例1.1 基类(父类)1.2 子类(具体控制器)<

多维数组找最大值

调用JavaScript的一个内置函数&#xff1a;Math.max() <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…

虚拟机VMware Workstation 常用的快捷方式

1、 虚拟机软件&#xff0c;如 VMware Workstation、VirtualBox 等 所使用的是 VMware Workstation 2、快捷方式 2.1 切换鼠标和键盘焦点 CtrlAlt&#xff1a;从虚拟机中释放鼠标和键盘&#xff0c;回到主机 2.2 全屏模式 2.2.1 进入全屏模式: CtrlAltEnter 2.2.2 退出全…

政安晨:【Keras机器学习示例演绎】(五十一)—— 利用广义网络、深度网络和交叉网络进行结构化数据学习

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 本文目标&#xff1a;使用 "宽深 "和 …

Python 技能提升(三)

global 和 nonlocal b 全局变量 global variabledef foo():a 局部变量 local variable# 在局部里面操作全局变量&#xff0c;需要加上声明global bb b &#xff01;&#xff01;&#xff01;print(b)foo() # 全局变量 global variable&#xff01;&#xff01;&#xff01…

Python 递归函数一例

现有示例数据 # 示例数据 pending_join [ {increment: "department Finance", statement_index: 0}, {increment: "name Lisa", statement_index: 2}, {increment: "gender Female", statement_index: 3}, {increment: "hire_date <…

redis如何实现分布式锁

Redisson是怎么实现分布式锁的 分布式锁&#xff1a;Redisson 提供了一种简单而强大的方式来实现分布式锁。 它支持多种锁模式&#xff0c;如公平锁、可重入锁、读写锁等&#xff0c;并且提供了锁的超时设置和自动释放功能。 锁的获取 在Redisson中常见获取锁的方式有 lock() …

【代码随想录训练营】【Day 37】【贪心-4】| Leetcode 840, 406, 452

【代码随想录训练营】【Day 37】【贪心-4】| Leetcode 840, 406, 452 需强化知识点 python list sort的高阶用法&#xff0c;两个key&#xff0c;另一种逆序写法python list insert的用法 题目 860. 柠檬水找零 思路&#xff1a;注意 20 块找零&#xff0c;可以找3张5块升…

Mysql基础教程(13):GROUP BY

MySQL GROUP BY 【 GROUP BY】 子句用于将结果集根据指定的字段或者表达式进行分组。 有时候&#xff0c;我们需要将结果集按照某个维度进行汇总。这在统计数据的时候经常用到&#xff0c;考虑以下的场景&#xff1a; 按班级求取平均成绩。按学生汇总某个人的总分。按年或者…

“世界酒中国菜”系列活动如何助推乡村振兴和文化交流?

"世界酒中国菜"系列活动如何助推乡村振兴和文化交流&#xff1f; 《经济参考报》&#xff08;2024年5月24日 第6版&#xff09; 新华社北京&#xff08;记者 张晓明&#xff09; “世界酒中国菜”系列活动自启动以来&#xff0c;已在国内外产生了广泛影响。这一国家…