HarmonyOS 第2章 Ability的开发,鸿蒙HarmonyOS 应用开发入门
第2章 Ability的开发
本章内容
本章介绍HarmonyOS的核心组件Ability的开发。
2.1 Ability概述
2.2 FA模型介绍
2.3 Stage模型介绍
2.4 Ability内页面的跳转和数据传递
2.5 Want概述
2.6 实战:显式Want启动Ability
2.7 实战:隐式Want打开应用管理
2.8 小结
2.9 习题
2.1 Ability概述
Ability翻译成中文就是“能力”的意思。在HarmonyOS中,Ability是应用所具备能力的抽象,也是应用程序的重要组成部分。
2.1.1 单Ability应用和多Ability应用
2.1.2 HarmonyOS应用模型
2.1.1 单Ability应用和多Ability应用
一个应用可以具备多种能力,也就是说可以包含多个Ability。HarmonyOS支持应用以Ability为单位进行部署。
2.1.2 HarmonyOS应用模型
HarmonyOS应用模型的构成要素
应用组件
应用进程模型
应用线程模型
应用任务管理模型
应用配置文件
截至目前,在HarmonyOS中,Ability框架模型结构具有以下两种形态:
FA模型:API 8及更早版本的应用程序只能使用FA模型进行开发。
Stage模型:从API 9开始,Ability框架引入并支持使用Stage模型进行开发,也是目前HarmonyOS所推荐的开发方式。
FA模型和Stage模型的工程目录结构存在差异,Stage模型目前只支持使用ArkTS语言进行开发。本书示例也是采用Stage模型开发的。
2.2 FA模型介绍
FA(Feature Ability)模型是HarmonyOS早期版本(API 8及更早版本)开始支持的模型,目前已经不再主推。
2.2.1 FA模型中的Ability
FA模型中的Ability分为PageAbility、ServiceAbility、DataAbility、FormAbility四种类型。其中:
PageAbility是具备UI实现的Ability,是用户具体可见并可以交互的Ability实例。
ServiceAbility也是Ability的一种,但是没有UI,为其他Ability提供调用自定义的服务,在后台运行。
DataAbility也是没有UI的Ability,为其他Ability提供进行数据增、删、查的服务,在后台运行。
FormAbility是卡片Ability,是一种界面展示形式。
2.2.2 FA模型的生命周期
2.2.3 FA模型的进程线程模型
2.3 Stage模型介绍
Stage模型是HarmonyOS 3.1版本开始新增的模型,也是目前HarmonyOS主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。
本节主要介绍以Stage模型为主的开发方式。
2.3.1 Stage模型的设计思想
2.3.2 Stage模型的Ability生命周期
2.3.3 Stage模型的Ability启动模式
2.3.1 Stage模型的设计思想
Stage模型的设计基于如下3个出发点:
为复杂应用而设计
支持多设备和多窗口形态
平衡应用能力和系统管控成本
2.3.2 Stage模型的Ability生命周期
Ability的生命周期包括Create、Foreground、Background、Destroy四个状态,WindowStageCreate和WindowStageDestroy为窗口管理器(WindowStage)在Ability中管理UI界面功能的两个生命周期回调,从而实现Ability与窗口之间的弱耦合
2.3.3 Stage模型的Ability启动模式
Ability的启动模式是指Ability实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了3种启动模式:
singleton(单实例模式)。
standard(标准实例模式)。
specified(指定实例模式)。
singleton启动模式
每次调用startAbility()方法时,如果应用进程中该类型的Ability实例已经存在,则复用系统中的Ability实例。系统中只存在唯一一个该Ability实例,即在最近任务列表中只存在一个该类型的Ability实例。此时,应用的Ability实例已创建,当再次调用startAbility()方法启动该Ability实例时,只会进入该Ability的onNewWant()回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调。
如果需要使用singleton启动模式,将module.json5配置文件中的"launchType"字段配置为"singleton’'即可。
{"module": {..."abilities": [{"launchType": "singleton",...}]}
}
standard启动模式
在standard启动模式下,每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型的Ability实例,即在最近任务列表中可以看到有多个该类型的Ability实例。这种情况下,可以将Ability配置为standard。
如果需要使用standard启动模式,将module.json5配置文件中的"launchType"字段配置为"standard"即可。
在specified启动模式下,在Ability实例创建之前,允许开发者为该实例创建一个唯一的字符串Key,创建的Ability实例绑定Key之后,后续每次调用startAbility()方法时,都会询问应用使用哪个Key对应的Ability实例来响应startAbility请求。运行时由Ability内部业务决定是否创建多个实例,如果匹配有该Ability实例的Key,则直接拉起与之绑定的Ability实例,否则创建一个新的Ability实例。
例如,用户在应用中重复打开同一个文档时,启动的均是最近任务列表中的同一个任务,以及在应用中重复新建文档时,启动的均是最近任务列表中的新任务。这种情况下,可以将Ability配置为specified。当再次调用startAbility()方法启动该Ability实例,且AbilityStage的onAcceptWant()回调匹配到一个已创建的Ability实例时,再次启动该Ability,只会进入该Ability的onNewWant()回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调。
如果需要使用specified启动模式,将module.json5配置文件的"launchType"字段配置为"specified"即可。
2.4 Ability内页面的跳转和数据传递
Ability的数据传递包括Ability内页面的跳转和数据传递、Ability间的数据跳转和数据传递。本节主要讲解Ability内页面的跳转和数据传递。
2.4.1 新建Ability内页面
2.4.2 页面跳转及传参
2.4.3 参数接收
2.4.4 运行
2.4.1 新建Ability内页面
初始化工程之后,会生成以下内容:
在src/main/ets/entryability目录下,初始会生成一个Ability文件EntryAbility.ts。可以在EntryAbility.ts文件中根据业务需要实现Ability的生命周期回调内容。
在src/main/ets/pages目录下,会生成一个Index页面。这也是基于Ability实现的应用的入口页面。可以在Index页面中根据业务需要实现入口页面的功能。
为了实现页面的跳转和数据传递,需要新建一个页面。在src/main/ets/pages目录下,可以通过右击New→Page来新建页面
在原有Index页面的基础上,新建一个名为Second的页面
Second页面创建完成之后,会自动做两个动作。一个动作是在src/main/ets/pages目录
下创建一个Second.ets文件。Second.ets文件内容如下:
@Entry
@Component
struct Second {@State message: string = 'Hello World'build() {Row() {Column(
相关文章:
HarmonyOS 第2章 Ability的开发,鸿蒙HarmonyOS 应用开发入门
第2章 Ability的开发 本章内容 本章介绍HarmonyOS的核心组件Ability的开发。 2.1 Ability概述 2.2 FA模型介绍 2.3 Stage模型介绍 2.4 Ability内页面的跳转和数据传递 2.5 Want概述 2.6 实战:显式Want启动Ability 2.7 实战:隐式Want打开应用管理 2.8 小结 2.9 习题 2.1 Abili…...
CS5346 - Interactivity in Visualization 可视化中的交互
文章目录 Visualization representation interactionInteraction (交互)Benefits (好处)Typical Interaction Techniques(交互技术)SelectFilteringAbstract / Elaborate几何放缩(Geometric zoom)语义放缩࿰…...
AI与我共创WEB界面
记录一次压测后的自我技术提升 这事儿得从机房停电说起。那天吭哧吭哧做完并发压测,正准备截Zabbix监控图写报告,突然发现监控曲线神秘失踪——系统组小哥挠着头说:“上次停电后,zabbix服务好像就没起来过…” 我盯着空荡荡的图表界面,大脑的CPU温度可能比服务器还高。 其…...
python蓝桥杯备赛常用算法模板
一、python基础 (一)集合操作 s1 {1,2,3} s2{3,4,5} print(s1|s2)#求并集 print(s1&s2)#求交集 #结果 #{1, 2, 3, 4, 5} #{3}(二)对多维列表排序 1.新建列表 list1[[1,2,3],[2,3,4],[0,3,2]] #提取每个小列表的下标为2的…...
代码随想录第17天:二叉树
一、二叉搜索树的最近公共祖先(Leetcode 235) 由于是二叉搜索树,节点的值有严格的顺序关系:左子树的节点值都小于父节点,右子树的节点值都大于父节点。利用这一点,可以在树中更高效地找到最低公共祖先。 c…...
第8篇:Linux程序访问控制FPGA端HEX<一>
Q:如何从DE1-SoC_Computer系统的ARM A9处理器访问FPGA端的七段数码管呢? A:DE1-SoC_Computer系统中有2个连接FPGA端HEX外设的并行端口HEX5_HEX4和HEX3_HEX0,每个端口有一个32位只读Data寄存器。地址为0xFF200020的寄存器驱动4个数…...
Android 添加一个自己的系统服务SystemService
Android 系统服务(System Services)是 Android 操作系统的核心组件,运行在系统层面,为应用程序提供底层硬件访问、系统资源管理以及跨应用功能支持。这些服务在后台持续运行,由系统进程(如 system_server&a…...
git安装(windows)
通过网盘分享的文件:资料(1) 链接: https://pan.baidu.com/s/1MAenYzcQ436MlKbIYQidoQ 提取码: evu6 点击next 可修改安装路径 默认就行 一般从命令行调用,所以不用创建。 用vscode,所以这么选择。...
C# visionpro联合编程中遇到的问题之 R6025 - pure virtual function call
C# visionpro联合编程中遇到的问题之 R6025 - pure virtual function call R6025 pure virtual function call解决方法步骤 1: 获取所有相机步骤 2: 遍历并关闭相机完整代码 R6025 pure virtual function call 如果错误 “R6025 - pure virtual function call” 发生在关闭窗体…...
OTA技术(一):原理与实现方案
目录 一.引言 二.核心原理 2.1 定义与分类 2.2 系统架构 2.3 典型的升级流程 三.嵌入式系统中的OTA实现方案 3.1 存储空间划分 3.2 关键技术 一.引言 在智能手机上点击系统更新、电动汽车解锁新功能、智能家居设备自动修复漏洞……这些场景背后都离不开一项关键技术——…...
strings.LastIndexAny 使用详解
目录 1. 官方包 2. 支持版本 3. 官方说明 4. 作用 5. 实现原理 6. 推荐使用场景和不推荐使用场景 推荐场景 不推荐场景 7. 使用场景示例 示例1:官方示例 示例2:日志清洗(去除末尾的乱码或非法字符) 8. 性能对比 性能…...
大型商场运营新变革:AcrelCloud - 3200 预付费系统应用全解析
一、方案概述 在现代商业运营和物业管理中,大型商场、商业小区以及大集团和大物业面临着复杂的费用收取和管理难题。安科瑞的 AcrelCloud - 3200 远程预付费管控云平台,借助先进的预付费电表等设备,为解决这些问题提供了高效的一体化解决方案…...
鸿蒙开发07-interface
在 ArkTS(HarmonyOS Ability Runtime TypeScript)中,interface(接口)是一种强大的类型工具,它主要用于定义对象的结构,为对象的属性和方法提供类型约束,帮助开发者编写更加规范、可维…...
Java从入门到“放弃”(精通)之旅——方法的使用⑤
Java从入门到“放弃”(精通)之旅🚀——方法的使用⑤ 📖引言: 在编程领域,代码如同精密的齿轮相互咬合驱动程序运转。随着项目规模渐长,重复的代码片段如同冗余的齿轮,不仅增加负重…...
5 C 程序全流程解析:编写、预处理、编译、汇编、链接、运行与 GCC 指令详解
1 C 程序运行机制流程概述 通过以上步骤,我们可以将一个 C 语言源代码文件逐步转换为一个可执行的二进制程序。这一过程涉及多个关键工具和步骤,每一步都承担着特定的任务,发挥着独特的作用。深入理解这些步骤,不仅有助于我们更好…...
leetcode:1351. 统计有序矩阵中的负数(python3解法)
难度:简单 给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非严格递减顺序排列。 请你统计并返回 grid 中 负数 的数目。 示例 1: 输入:grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]] 输…...
hive数仓要点总结
1.OLTP和OLAP区别 OLTP(On-Line Transaction Processing)即联机事务处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用…...
LeetCode[541]反转字符串Ⅱ
思路: 题目给我们加了几个规则,剩余长度小于2k,大于等于k就反转k个,小于k就全部反转,我们按照这个逻辑来就行。 第一就是大于等于k就反转k个,我们for循环肯定是i2k了,接下来就是判断是否大于等于…...
瑞幸微RK系列平台的YOLO部署(上篇)
🎇环境配置 🎉前言 部署的第一步是对环境的配置,不同的平台的平台需要依赖的环境不同,之前在英伟达的Jetson系列部署过,其主要是需要配置CUDA和CUDNN的环境,需要加速推理的话可能还需要TensorRT的环境。 …...
HarmonyOS:页面滚动时标题悬浮、背景渐变
一、需求场景 进入到app首页或者分页列表首页时,随着页面滚动,分类tab要求固定悬浮在顶部。进入到app首页、者分页列表首页、商品详情页时,页面滚动时,顶部导航栏(菜单、标题)背景渐变。 二、相关技术知识点…...
无人设备遥控器之安全防护与预警篇
无人设备遥控器的安全防护与预警是保障无人机、无人船、无人车等无人系统安全运行的关键环节。随着无人设备在农业、测绘、物流、安防等领域的广泛应用,其遥控器的安全性与可靠性显得尤为重要。 一、安全防护 1. 物理安全防护 外壳防护:采用防水、防尘…...
win10win11启用组策略编辑器
今天发现家庭版的win11系统没有组策略编辑器, 桌面新建txt文件,打开 编写以下脚本: echo off pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >Li…...
谷歌浏览器的开发者模式如何开启及安装教程
在谷歌浏览器(Google Chrome)中开启开发者模式并安装扩展程序(如未上架商店的插件或自定义扩展)的步骤如下: 一、开启开发者模式 打开扩展管理页面 在浏览器地址栏输入:chrome://extensions/ 或通过菜单进入…...
WebRTC实时通话EasyRTC嵌入式音视频通信SDK,构建智慧医疗远程会诊高效方案
一、方案背景 当前医疗领域,医疗资源分布不均问题尤为突出,大城市和发达地区优质医疗资源集中,偏远地区医疗设施陈旧、人才稀缺,患者难以获得高质量的医疗服务,制约医疗事业均衡发展。 EasyRTC技术基于WebRTC等先进技…...
C++性能优化实战:从瓶颈定位到高并发架构重构(第一章)
在高并发编程的世界中,性能瓶颈往往潜伏在代码的深处,悄无声息地吞噬着系统的吞吐量。想象一下,你正在开发一个游戏服务器,需要在每毫秒内为数千名玩家分配和释放内存,任何微小的延迟都可能导致玩家体验的崩塌。你是否曾遇到过这样的困惑:增加了线程数,期待性能翻倍,结…...
Terraform 迷思:当优雅的模块 terraform-aws-eks 与现实碰撞
大家好,今天想和大家聊聊一个可能很多技术人都经历过的场景——面对看似完美的工具或代码库,却陷入意想不到的困境,甚至开始有点怀疑人生的时刻。 启程:雄心勃勃的 EKS 模块优化 故事的开端往往充满希望。就像我今天࿰…...
路由器端口映射的意思、使用场景、及内网ip让公网访问常见问题和解决方法
一、端口映射是什么意思 端口映射是将内网主机的IP地址端口映射到公网中,内部机器提供相应的互联网服务。当异地用户访问该这个端口时,会自动将请求映射到对应局域网内部的机器上。 二、端口映射常见使用场景 1,远程访问需求。当有…...
【MySQL 数据库】增删查改操作CRUD(下)
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 聚合函数 1.1 常见聚合函数 1.1.1 COUNT 1.1.2 SUM 1.1.3 AVG 1.1.4 MAX 2. Group by 分组 2.1 分组示例 3. having 语句 3.1 having 过滤结果 3…...
Android 日志输出模块
Android 日志输出模块 本文主要记录下封装的日志输出模块. 1: 主要功能 日志模块初始化,并设置日志级别支持将日志写入文件日志文件单个限制200M,按天记录到指定文件,文件达到阈值后,记录新的日志文件.支持导出日志文件zip. 2: 具体实现 日志整体初始化使用静态内部类的方式…...
群辉搭建静态网站
写在前面,本文章主要是记录自己搭建过程以备后来需要时温习下! 1.安装并打开web station 2. 2.打开 File Station 找到web文件夹 把静态导航网站的代码下载下来,并上传到上面 web 文件夹下 3. 在Web Station 套件里面,在网页服…...
51单片机波特率与溢出率的关系
1. 波特率与溢出率的基本关系 波特率(Baud Rate)表示串口通信中每秒传输的位数(bps),而溢出率是定时器每秒溢出的次数。在51单片机中,波特率通常通过定时器的溢出率来生成。 公式关系: 波特率=溢出率/分频系数 其中,分频系数与定时器的工作模…...
数据库原理及应用mysql版陈业斌实验三
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 实验三多表查询 1.实验数据如下 student 表(学生表&#…...
Python 二分查找(bisect):排序数据的高效检索
二分查找:排序数据的高效检索 第二天清晨,李明早早来到了图书馆。今天他的研究目标是bisect模块,特别是其中的bisect_left和bisect_right函数。这些函数实现了二分查找算法,用于在已排序的序列中高效地查找元素或确定插入位置。 …...
ClickHouse
ClickHouse说明 ClickHouse是一种高性能、分布式的开源列式数据库管理系统(DBMS),专门用于在线分析处理(OLAP)工作负载。是俄罗斯的 Yandex 公司于 2016 年开源的列式存储数据库,使用 C 语言编写。ClickHou…...
【Linux生成SSH秘钥实现远程连接】Linux生成SSH秘钥对与修改服务配置文件实现无密码远程连接
文章目录 前言1. Linux 生成SSH秘钥对2. 修改SSH服务配置文件3. 客户端秘钥文件设置4. 本地SSH私钥连接测试5. Linux安装Cpolar工具6. 配置SSHTCP公网地址7. 远程SSH私钥连接测试8. 固定SSH公网地址9. 固定SSH地址测试 前言 在数字化江湖中,企业对各种技术的需求就…...
中间件--ClickHouse-4--向量化执行(什么是向量?为什么向量化执行的更快?)
1、向量(Vector)的概念 (1)、向量的定义 向量:在计算机科学中,向量是一组同类型数据的有序集合,例如一个包含多个数值的数组。在数据库中,向量通常指批量数据(如一列数…...
conda导出环境以及安装环境
1. 导出环境 1.1导出完整的环境配置(包含精确版本和平台信息): conda env export > /path/to/your/directory/environment.yml1.2 导出不含平台信息的配置(更适合跨平台共享): conda env export --no…...
Mysql数据库基本操作-DML
有基础的可以直接看总结里面的思维导图 简单来说就是增删改 一、Mysql数据库基本操作-DML-insert-数据插入 如果写上列和值,那么相应的列要对应相应的值,而且列的类型要和值的类型相同 格式1:insert into 表(列名) v…...
html:文件上传-一次性可上传多个文件,将文件展示到页面(可删除
一、原始上传样式 1、效果 2、完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" cont…...
计算机网络(第四章)
网络层 一、网络层提供的两种服务 虚电路 :虚电路是一种在通信开始之前建立连接的方式。它类似于电话通话,双方在通话前要建立连接;数据报 :数据报是一种无连接的通信方式。每个数据包(数据报)独立地发送…...
【PostgreSQL教程】PostgreSQL 特别篇之 语言接口连接PHP
博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…...
Java学习——day30(Lambda表达式与 StreamAPI)
文章目录 1. Lambda 表达式1.1 概述1.2 应用场景1.3 示例代码 2. Stream API2.1 概述2.2 基本组成2.3 示例代码 3.练习3.1 .练习初级:3.2 中级:3.3 高级: 4.总结与应用4.1 Lambda 表达式4.2 Stream API 1. Lambda 表达式 1.1 概述 定义&…...
mysql no space left on device
文章目录 1. 查看磁盘使用情况2. 清理 /tmp 目录3. 调整 MySQL 临时文件目录4. 增加磁盘空间5. 优化数据库操作 我在执行 MySQL 的 UPDATE 语句时遇到 error writing file /tmp/*** no space left on device 错误,这表明 MySQL 临时文件存储目录 /tmp 空间不足。以下…...
异步编程——微信小程序
1. 前言 引用来自:微信小程序开发中的多线程处理与异步编程_微信小程序 多线程-CSDN博客 微信小程序是基于JavaScript开发的,与浏览器JavaScript不同,小程序运行在WebView内部,没有多线程的概念。小程序的 JavaScript 是单线程的…...
聊透多线程编程-线程池-8.C# 线程互斥实现方式
目录 1. 锁机制 (Locking Mechanisms) (1) lock 关键字 (2) Monitor 类 2. 跨进程互斥机制 3. 信号量机制 (1) Semaphore 和 SemaphoreSlim 4. 读写锁机制 (1) ReaderWriterLockSlim 5. 原子操作机制 (1) Interlocked 类 6. 自旋锁机制 (1) SpinLock 线程互斥是一种…...
渗透测试学习-概述
1.渗透测试 渗透测试( Penetration Testing )是指受信任的第三方通过模拟黑客的攻击技术与手段对目标网络、系统进行攻击测试,发现目标的安全隐患并给出安全加固建议的一种安全测试与评估方法。 具体来讲,渗透人员在不同的位置(…...
一键解锁Landsat 9地表温度计算!ENVI与ArcGIS Pro全流程详解(无需NASA大气校正)
为什么选择Landsat 9的L2SP数据? 之前:《ArcGIS与ENVI——基于landsat与Modis影像的遥感技术的生态环境质量评价》,基于Landsat前期的产品计算温度反演数据需要一系列复杂的步骤。 现在: Landsat 8-9的Collection 2 Level-2&…...
线代第七课:范德蒙德压缩
比如: 解析: 观看笔记来源: 《线性代数》教学视频 宋浩老师(2024年更新)...
Spark-SQL(一)
Spark SQL 概述 Spark SQL是Apache Spark用于处理结构化数据的模块 特点 1 易整合。无缝的整合了 SQL 查询和 Spark 编程 2 统一的数据访问。使用相同的方式连接不同的数据源 3 兼容 Hive。在已有的仓库上直接运行 SQL 或者 HQL 4 标准数据连接。通过 JDBC 或者 ODBC 来连…...
(自用)window防火墙关闭
自己老师忘了怎么关防火墙,导致每次都要重新找一遍,再下软件,所以写这篇 把这个地方打开可以看到被隔离的软件,然后点击还原即可使用了...