HarmonyOS3 Stage模型介绍

news/2025/2/11 12:30:48/

Stage模型是HarmonyOS 3.1 Develper Preview(API 9)版本开始新增的模型,也是目前HarmonyOS主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。本书也主要介绍以Stage模型为主的开发方式。

Stage模型的设计思想

Stage模型之所以成为主推模型,源于其设计思想。Stage模型的设计基于如下3个出发点。

1. 为复杂应用而设计

简化应用复杂度:

  • 多个应用组件共享同一个ArkTS引擎(运行ArkTS语言的虚拟机)实例,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。
  • 采用面向对象的开发方式,使得复杂应用代码可读性高、易维护性好、可扩展性强。

2. 支持多设备和多窗口形态

应用组件管理和窗口管理在架构层面解耦:

  • 便于系统对应用组件进行裁剪(无屏设备可裁剪窗口)。
  • 便于系统扩展窗口形态。
  • 在多设备(如桌面设备和移动设备)上,应用组件可使用同一套生命周期。

3. 平衡应用能力和系统管控成本

Stage模型重新定义应用能力的边界,平衡应用能力和系统管控成本。

  • 提供特定场景(如卡片、输入法)的应用组件,以便满足更多的使用场景。
  • 规范化后台进程管理:为保障用户体验,Stage模型对后台应用进程进行了有序治理,应用程序不能随意驻留在后台,同时应用后台行为受到严格管理,防止恶意应用行为。

Stage模型的Ability生命周期

在Ability的使用过程中,会有多种生命周期状态。掌握Ability的生命周期,对于应用的开发非常重要。

为了实现多设备形态上的裁剪和多窗口的可扩展性,系统对组件管理和窗口管理进行了解耦。Ability的生命周期包括Create、Foreground、Background、Destroy四个状态,WindowStageCreate和WindowStageDestroy为窗口管理器(WindowStage)在Ability中管理UI界面功能的两个生命周期回调,从而实现Ability与窗口之间的弱耦合。如图所示。

Stage模型的Ability启动模式

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

  • singleton(单实例模式)
  • standard(标准实例模式)
  • specified(指定实例模式)

1. singleton启动模式

singleton是默认情况下的启动模式。

每次调用startAbility()方法时,如果应用进程中该类型的Ability实例已经存在,则复用系统中的Ability实例。系统中只存在唯一一个该Ability实例,即在最近任务列表中只存在一个该类型的Ability实例。此时,应用的Ability实例已创建,当再次调用startAbility()方法启动该Ability实例,此时只会进入该Ability的onNewWant()回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调。

如果需要使用singleton启动模式,在module.json5配置文件中的"launchType"字段配置为"singleton"即可。

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

2. standard启动模式

在standard启动模式下,每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型Ability实例。即在最近任务列表中可以看到有多个该类型的Ability实例。这种情况下可以将Ability配置为standard。

standard启动模式的开发使用,在module.json5配置文件中的"launchType"字段配置为"standard"即可。

3. specified启动模式

在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"即可。

参考引用

  • 《跟老卫学HarmonyOS开发》 开源免费教程,https://github.com/waylau/harmonyos-tutorial
    *《鸿蒙 HarmonyOS 应用开发从入门到精通战》(柳伟卫著,北京大学出版社)https://item.jd.com/13696724.html、http://product.dangdang.com/29386650.html
  • 《鸿蒙HarmonyOS手机应用开发实战》(清华大学出版社2022年1月出版) https://item.jd.com/13568130.html
  • “鸿蒙系统实战短视频App 从0到1掌握HarmonyOS”视频教程https://coding.imooc.com/class/674.html

http://www.ppmy.cn/news/224867.html

相关文章

工业相机为什么要加镜头_为什么相机镜头又大又重?

工业相机为什么要加镜头 The mirrorless camera revolution was meant to bring about smaller, lighter camera gear but in reality, camera manufacturers have just taken the opportunity to make bigger, better lenses. The why comes down to the physics of lenses. 无…

镜头评价指标及测试方法(一)

一、前言 监控是CCD成像器件诞生后最早进入现实应用的领域之一。早期,由于监控目的和成本约束,对成像分辨率和像质要求均比较低。随着CCD器件发展以及周边电子产品(记录、存贮、处理等)性能提升和价格平抑,高品质的监…

WebGIS学习-01-GIS基础概念与Mapbox基础

1.地图数据来源 1.栅格数据: -.jpg,.png等图片数据; -卫星等拍摄的影像;.tiff 2.矢量数据: -geojson的数据,多用于绘制边界 -放大缩小都不会失真,且高度支持手绘 2.网页是如何渲染地图数据的 …

一个典型的视觉系统——镜头

镜头camera shot 镜头分类 产地分类:主要是日系镜头和德系镜头。日系镜头主要是色彩的还原性比较好,德系镜头的层次感比较强。 性能外形分类:P、E、L、自动变焦镜头。 焦距大小分类:标准镜头 、广角镜头 、望远镜头。 光圈分类&am…

1、2、3类LSA解析

拓扑 需求 (1)企业核心机房,连接不同楼宇,实现不同楼宇互通; (2)企业核心机房设置为OSPF骨干区域; (3)其他办公楼宇为非骨干区域,通过路由器与…

从0开始搭建vue3+vite+ts+pinia项目

目录 项目搭建选项 项目搭建步骤 本地开发环境 Vite脚手架构建项目 关联Git仓库 开发工具 安装pinia 安装Sass 安装Vant-UI 安装postcss-pxtorem(移动端项目) 安装axios 本地调试 环境变量 本地代理 全局UI组件 路由中间件 项目部署 n…

安卓ANR问题排查手册

前言 目前,我们大多数的应用都是没有专门接入ANR监控框架的,所以,本文的讲解主要是以借助log和trace的方式进行ANR问题的分析。 一.ANR问题分类 大分类 小分类 Reason/Subject 超时时间 原因 输入无响应 输入事件未响应 Input dispat…

Word控件Spire.Doc 【其他】教程(6):从 Word 中提取 OLE 对象

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…