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

2024-06-02 13:04

本文主要是介绍【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"}
}

这篇关于【HarmonyOS】Stage 模型 - UIAbility 的启动模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024040

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee