鸿蒙开发(七)-UIAbility启动模式

鸿蒙开发(七)-启动模式

根据代码中定义,UIAbility的启动模式有以下几种:

"launchType": {"description": "Indicates the boot mode of ability.","type": "string","enum": ["standard","singleton","specified","multiton"],"default": "singleton"
},

可以看到enum中有四种启动模式:standard,singleton,specified,multiton。

而系统默认的启动模式是singleton

1:standard

standard多实例模式,每次都会新建实例,在最近任务列表中多出一个。

2:singleton

singleton为单实例模式,是默认的启动模式。

如果应用进程中存在该UIAbility实例,则复用系统中的实例,最近列表中只会存在一个该类型的的实例。

3:specified

specified启动模式为指定实例模式,针对一些特殊场景使用(例如文档应用中每次新建文档希望都能新建一个文档实例,重复打开一个已保存的文档希望打开的都是同一个文档实例)。

在UIAbility实例创建之前,允许开发者为该实例创建一个唯一的字符串Key,创建的UIAbility实例绑定Key之后,后续每次调用startAbility()方法时,都会询问应用使用哪个Key对应的UIAbility实例来响应startAbility()请求。运行时由UIAbility内部业务决定是否创建多实例,如果匹配有该UIAbility实例的Key,则直接拉起与之绑定的UIAbility实例,否则创建一个新的UIAbility实例。

4:multiton

multiton也算是多实例,每次都会新建实例,但是最近任务列表中只会有一个。

5:新建Ability以及Page

首先新建ability:

在这里插入图片描述

接着需要输入ability名称(这个是唯一的)。

在这里插入图片描述

填写完成,finish后,默认并不是在当前目录新建了个文件,而是在ets目录下新建了个同名的目录,然后才是Ability文件。

import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.hilog';
import window from '@ohos.window';export default class EntryAbility4 extends UIAbility {onCreate(want, launchParam) {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');}onDestroy() {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');}onWindowStageCreate(windowStage: window.WindowStage) {// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');windowStage.loadContent('pages/Index', (err, data) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');});}onWindowStageDestroy() {// Main window is destroyed, release UI related resourceshilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');}onForeground() {// Ability has brought to foregroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');}onBackground() {// Ability has back to backgroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');}
}

最后还有一点要注意,这里默认的loadContent都是pages/Index.

所以我们还要创建对应的page:

在这里插入图片描述
在这里插入图片描述

下面是每次创建后的模版代码:

@Entry
@Component
struct Page3 {@State message: string = 'Hello World'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}

另外page的注册信息,还需要在main_pages.json中注册。

当然,如果我们点击新建,studio会自动绑定该信息,如果我们是手动复制代码,拷贝的文件,就需要在json文件中page信息添加了。

6: 添加button,跳转ability

首先,在page文件中获取context:

// 获取UIAbilityContext
let context = getContext(this) as common.UIAbilityContext;

创建want:

let want={deviceId:"",bundleName:"com.zh.test",abilityName:"EntryAbility2"}

添加button,完整的代码如下:

import common from '@ohos.app.ability.common'
@Entry
@Component
struct Page2 {@State message: string = 'jump2'build() {Row() {Column() {Button(this.message).fontSize(50).fontWeight(FontWeight.Bold).onClick(()=>{// 获取UIAbilityContextlet context = getContext(this) as common.UIAbilityContext;let want={deviceId:"",bundleName:"com.zh.test",abilityName:"EntryAbility2"}context.startAbility(want)})}.width('100%')}.height('100%')}
}

7:修改launchType

在module.json5中修改launchType,验证启动模式。

 {"name": "EntryAbility4","srcEntry": "./ets/entryability4/EntryAbility4.ts","description": "$string:EntryAbility4_desc","icon": "$media:icon","launchType": "multiton","label": "$string:EntryAbility4_label","startWindowIcon": "$media:icon","startWindowBackground": "$color:start_window_background"}

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

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

相关文章

springboot点餐平台网站

目 录 摘 要 1 前 言 2 第1章 概述 2 1.1 研究背景 3 1.2 研究目的 3 1.3 研究内容 4 第二章 开发技术介绍 5 2.1相关技术 5 2.2 Java技术 6 2.3 MySQL数据库 6 2.4 Tomcat介绍 7 2.5 Spring Boot框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行…

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记12:DAC数模转换

系列文章目录 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装 嵌入式|蓝桥杯STM32G431(…

Django(二)-搭建第一个应用(1)

一、项目环境和结构 1、项目环境 2、项目结构 二、编写项目 1、创建模型 代码示例: import datetimefrom django.db import models from django.utils import timezone# Create your models here.class Question(models.Model):question_text models.CharField(max_length2…

golang grpc和protobuf的版本降级问题(version4 -> version3)

最后更新于2024年3月28日 10:57:52 简中没查到类似的文章。一点小事闹麻了,搞了一天,特意发出来造福大家。 所谓的版本就是下面这个东西proto.ProtoPackageIsVersion4或者proto.ProtoPackageIsVersion3: 目的 为了适配旧代码&#xff0c…

【Monero】Wallet RPC | Wallet CLI | 门罗币命令行查询余额、种子、地址等命令方法教程

ubuntu22.04 首先在运行daemon,详细安装运行教程可参考:The Monero daemon (monerod) ./monerodWallet CLI run ./monero-wallet-cli如果还没有钱包就根据提示创建钱包即可 输入密码 查询余额 balance查询种子 seed其他可执行命令操作&#xff1…

跳槽多次未成功,问题源自何处?

众所周知,2023年市场很难!看着企业们纷纷裁员,甚至连内推这个后门都走不通!哪怕有面试,都是屡屡碰壁,你想清楚问题出在哪了吗?😭“求职不得,夜不能寐;三更半夜…

GEE土地分类——基于遥感影像数据的不同作物的分类

简介 这里我们首先要更改原始代码的中的影像和研究区矢量的问题,这个为了防止我们计算的过程超限,建议先将我们的研究区影像和样本点先存在自己的assets中,然后导入到新的脚本中。然周本文就是对其进行影像进行归一化处理,然后进行样本点值提取至点,然后训练样本点,进行…

学习刷题-14

3.29 贪心算法 跳跃游戏 II 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 贪心的思路,局部最优:当前可移动距离尽可能多…

【4】单链表(有虚拟头节点)

【4】单链表(有虚拟头节点) 1、虚拟头节点2、构造方法3、node(int index) 返回索引位置的节点4、添加5、删除6、ArrayList 复杂度分析(1) 复杂度分析(2) 数组的随机访问(3) 动态数组 add(E element) 复杂度分析(4) 动态数组的缩容(5) 复杂度震荡 7、单链…

3.两数相加 - 链表

文章目录 题目简介题目解答代码: 题目链接 大家好,我是晓星航。今天为大家带来的是 两数相加 相关的讲解!😀 题目简介 题目解答 通过题目给的第一个示例来解析 图解如下: l1的2和l2的5首先相加变为7 这里相加结果为7…

Ubuntu18.04安装wireshark

安装wireshark 环境Ubuntu18.04 1.使用root用户进行安装 2.将 wireshark-dev/stable PPA 添加到系统的软件源列表中。系统就可以从该PPA获取Wireshark软件包及其更新了。 apt-add-repository ppa:wireshark-dev/stable3.确保你系统上的软件包信息是最新的,这样在…

Yarn - macOS 上安装使用

文章目录 关于 YarnYarn 工作流程安装检查安装、查看版本 常用命令 关于 Yarn Yarn 是一款成熟的开源软件包管理器,用于管理 JavaScript 项目中的依赖关系。 官网:https://yarnpkg.comgithub : https://github.com/yarnpkg官方文档:https:/…

高炉项目中DeviceNET到Ethernet的转换奥秘

在工业自动化的世界中,高炉项目中的数据通信至关重要。其中DeviceNET和Ethernet作为两种主流的网络协议,扮演着不可或缺的角色。它们之间的转换不仅仅是技术上的桥梁,更是实现信息高效传递的关键。今天,我们就来揭开从DeviceNET到…

数据结构——lesson13排序之计数排序

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

Java 中的单例模式

引言: 在 Java 编程中,单例模式是一种常见的设计模式,它保证一个类只能创建一个实例,并提供一个全局访问点。单例模式在很多场景下都非常有用,比如线程池、日志系统、数据库连接池等。本文将详细介绍 Java 中单例模式的…

操作教程|在MeterSphere中通过SSH登录服务器的两种方法

MeterSphere开源持续测试平台拥有非常强大的插件集成机制,用户可以通过插件实现平台能力的拓展,借助插件或脚本实现多种功能。在测试过程中,测试人员有时需要通过SSH协议登录至服务器,以获取某些配置文件和日志文件,或…

知乎:多云架构下大模型训练,如何保障存储稳定性?

知乎,中文互联网领域领先的问答社区和原创内容平台,2011 年 1 月正式上线,月活跃用户超过 1 亿。平台的搜索和推荐服务得益于先进的 AI 算法,数百名算法工程师基于数据平台和机器学习平台进行海量数据处理和算法训练任务。 为了提…

在 Linux中解压,压缩命令详解

在 Linux中解压,压缩命令详解 在 Linux中解压,压缩命令详解 🐧💻摘要引言正文内容解压命令详解1. 解压 .zip 文件unzip 命令 2. 解压 .tar.gz、.tar.bz2、.tar.xz 文件tar 命令 3. 解压其他格式的压缩文件gzip 命令bzip2 命令 压…

哥本哈根Major后steam搬砖该何去何从?

都在问我哥本哈根major比赛过后市场会不会崩盘呢?说实话,我是不喜欢预测市场的,其实是没那个本事而已。若真有这个预测市场走势的本事,我还用坐在这里每天苦哈哈的搬砖吗?我直接干囤卡囤号的倒卖生意岂不早发财了&…

宝塔面板与1Panel的详细对比分析

在当今的服务器管理领域,宝塔面板和1Panel都是备受欢迎的管理工具。它们各自具有独特的特点和优势,同时也存在一些局限性。本文将从多个维度对比这两款产品,帮助用户根据自身需求做出更合适的选择。 宝塔面板 优点 易用性:宝塔…