当前位置: 首页 > news >正文

鸿蒙中,UIAbility组件启动模式(3种分别是Singleton(单实例模式)Multiton(多实例模式)Specified(指定实例模式))

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式:

Singleton(单实例模式)

Multiton(多实例模式)

Specified(指定实例模式)

Singleton(单实例模式)

singleton启动模式为单实例模式,也是默认情况下的启动模式。

简单理解就是,当我们每次调用startAbility()方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用已经存在的UIAbility实例。(并未创建一个新的UIAbility实例,而是进入该UIAbilty的onNewWant()回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调)可以理解为系统中只存在唯一一个该UIabilty实例,即在最近任务列表中仅仅只存在一个该UIAbility实例。

Singleton启动模式需要在module.json5配置文件中的launchType字段配置为singleton

Multiton(多实例模式)

multiton启动模式为多实例模式,每次调用startAbility()方法时,与Singleton(单实例模式)不同是都会在应用进程中创建一个新的该类型UIAbility实例。(即使最近的列表中该实例)

multiton启动模式需要在module.json5配置文件中的launchType字段配置为multiton

Specified(指定实例模式)

specified启动模式为指定实例模式,就好比在特定的场景使用(文档应用中每次新建都希望能创建一个新的文档,或者是重复打开一个已经保存的文档希望打开的都是同一个文档实例)。

假设有两个实例,EntryAbility和specifiedAbility。

EntryAbility调用startAbility()方法,并在Want的parameters字段设置唯一的Key值。

系统在拉起SpecifiedAbilty之前,会先进入对应的AbilityStage的onAcceptWant()生命周期回调,获取用于标识目标UIAbility的Key值。

系统根据Key值来匹配UIAbility。

1.如果匹配成功,则会启动UIAbility实例,进入onNewWant()生命周期回调。

2.如果匹配不成功,则会创建一个新的UIAbility实例,并进入该UIAbility实例的onCrate()生命周期回调和onWindowStageCreate()生命周期回调。

新建文档就是跟多实例模式类似,一直创建新的文档。(一直点击一直创建新的文档),具体用法还要根据key值来确定

打开已保存的文档类似单例模式,  具体用法还要根据key值来确定

specified启动模式需要在module.json5配置文件中的launchType字段配置为specified

在EntryAbility中,调用startAbility()方法时,可以在want参数中传入了自定义参数instanceKey作为唯一标识符,以此来区分不同的UIAbility实例。示例中instanceKey的value值设置为字符串'KEY'。

  1. // 在启动指定实例模式的UIAbility时,给每一个UIAbility实例配置一个独立的Key标识
  2. // 例如在文档使用场景中,可以用文档路径作为Key标识

开发者根据业务在SpecifiedAbility的onAcceptWant()生命周期回调设置该UIAbility的标识。示例中标识设置为SpecifiedAbilityInstance_KEY。

http://www.dtcms.com/a/20149.html

相关文章:

  • 如何学习Elasticsearch(ES):从入门到精通的完整指南
  • Java短信验证功能简单使用
  • vscode/cursor+godot C#中使用socketIO
  • SpringMVC新版本踩坑[已解决]
  • AUGUST的深度学习笔记(四,现代循环神经网络与注意力机制)
  • $符(前端)
  • 神经网络常见激活函数 9-CELU函数
  • CAS单点登录(第7版)10.多因素身份验证
  • 02.01、移除重复节点
  • Python关于类的一个坑点
  • 【Film Shot】Shot transition detection
  • Dify:修改环境变量并通过 Docker Compose 复用现有容器
  • 新建github操作
  • 【前端进阶】「全面优化前端开发流程」:利用规范化与自动化工具实现高效构建、部署与团队协作
  • Retrieval-Augmented Generation for LargeLanguage Models: A Survey
  • 用C语言解决逻辑推理问题:找出谋杀案凶手
  • C++游戏开发
  • 关于DispatchTime和DispatchWallTime
  • SQL sever数据导入导出实验
  • 【kafka系列】消费者
  • ubuntu /dev/ttyUSB1重命名为/dev/ttyUSB0。
  • CentOS 7.8 安装MongoDB 7教程
  • 【ROS2综合案例】乌龟跟随
  • 【信息学奥赛一本通 C++题解】1281:最长上升子序列
  • 反转链表2(92)
  • ThreadLocalRandom原理剖析
  • Spring Cloud — 深入了解Eureka、Ribbon及Feign
  • 2.【线性代数】——矩阵消元
  • C++:高度平衡二叉搜索树(AVLTree) [数据结构]
  • 【Cocos TypeScript 零基础 15.1】