【HarmonyOS】Stage 模型 - 基本概念

一、项目结构

如图1所示:
请添加图片描述

图1

从项目结构来看,这个应用的内部包含了一个子模块叫 entry,模块是应用的基本功能单元,它里面包含源代码、资源、配置文件等。

像这样的模块在应用内部可以创建很多。但模块整体来讲就分成两大类:

  • 第一类就像 entry 这样,它的内部其实是开发这个应用内的一些特殊能力的,像这样的模块,我们称之为 Ability Module,顾名思义就是能力模块。一个应用的内部它的能力有很多,我们就可以把不同的能力放到不同的模块里去开发。举个例子,支付宝,它的核心功能是支付,像我们熟悉的付款、转账等都属于是支付类的,这部分能力我们就可以把它们放到一个模块里。后来随着支付宝的发展,又增加了其他的能力,比如小程序、视频、看书等,这些能力相互之间都是独立的,所以它们也都可以放到独立的 Ability Module 里去开发。这样一来整个应用的能力就被清晰的划分出来,管理起来也非常的方便。

  • 第二类是在开发的过程肯定有一些通用的工具、资源、配置或者组件等,这些如果每一个模块都各自去开发显然是一种重复和浪费,所以我们就可以把这些通用的东西抽取起来,放到一个单独的模块里去,这样的模块我们称之为 Library Module,顾名思义就是一种共享依赖类型的模块。Ability 类型的 Module 就可以去引用 Library 类型的 Module。

如图2所示:
请添加图片描述

图2

二、项目编译、打包

源码将来肯定要去编译、打包,最终整个项目会被编译成一个 APP,也就是我们熟悉的那个安装包。只不过,在 Stage 模型里面,为了降低不同功能模块之间的耦合,事实上每一个模块都是可以去独立编译和运行的。所有的 Ability 类型的模块,将来就会被编译成 HAP 文件,而所有的 Library 类型的模块,则会被编译成 HSP 文件。所谓的 HAPHarmony Ability Package,也就是鸿蒙能力类型的包。而 HSP 则是 Harmony Shared Package,也就是鸿蒙共享类型的包。HAP 的包在运行的过程中就可以去引用和依赖 HSP 的包。

一个应用内部可能会包含多个不同的能力,就会分成很多的 Ability Module,因此往往就会有多个 HAP 的文件。但是,尽管都是 HAP 类型的文件,但是它们是有差异的,比如 entry 模块,entry 是项目的入口,在这个能力模块里面,主要开发的是项目入口界面等信息,还有就是整个项目或应用的主能力模块,也就是最核心的部分。剩下的一些特殊的能力模块,比如小程序、视频、看书等,这些能力模块,都是拓展功能。一个应用它的入口只能有一个,所以说如果我们的应用内部有很多的 HAP 文件,但是作为入口的 HAP 文件只有一个,那么这个 HAP 文件就叫 Entry 类型的 HAP,剩下的拓展功能就叫 Feature 类型的 HAP。所以,一个应用内部有且只有一个 Entry 类型的 HAP,但是 Feature 类型的 HAP 可以有多个。

HAP 有很多很多文件,将来最终要合并在一起。合并在一起之后称之为 Bundle。这个 Bundle 有一个自己的名字也就是 Bundle Name,这个 Name 可以理解成整个应用的唯一标识,将来整个 Bundle 最后合并打包会变成一个 APP。

如图3所示:
请添加图片描述

图3

之所以要采用这种多 HAP 文件打包模式,是因为:

  1. 降低不同模块之间的耦合,每个 HAP 都可以去独立编译和运行。
  2. 我们的应用在去下载安装时,可以选择性的安装,不是说一上来就把全部都安装好了,比如我们可以先安装它的核心模块 Entry,其它的 Feature 可以选择性安装。这样就可以降低应用安装时所占用的体积。

三、项目运行

每一个 HAP 都是可以独立运行的,而 HAP 在运行的时候,为了展示我们看到的界面和它的能力,都会创建一个名为 AbilityStage 的实例,我们称它为应用组件的“舞台”。为啥叫舞台呢?舞台肯定是在上面展示东西的,顾名思义展示的就是应用组件。

应用能力组件又有很多类型:

  • UIAbility:包含UI界面的应用组件,是系统调度的基本单元。
  • ExtensionAbility:拓展能力组件,例如在桌面展示的应用卡片等。

UIAbility 作为UI界面的组件,将来要展示UI界面,需要注意,它不是直接展示,首先会持有一个 WindowStage 的实例对象,WindowStage 跟 AbilityStage 类似,都是一个舞台,但是 WindowStage 是组件内窗口的舞台,也就是说UI组件内部先要有一个窗口(这个窗口是要展示在舞台上),所以 WindowStage 它的上面就会持有 Window 对象,也就是窗口,窗口里面展示我们的UI界面。因此这个 Window 就是用来绘制UI页面的窗口。

如图4所示:
请添加图片描述

图4

综上所述,Stage 模型采用的是舞台的机制,先来一个 AbilityStage(用来展示这些组件的舞台),然后在舞台上创建 Ability,这个组件将来要去渲染UI,它要持有一个窗口的舞台(WindowStage),在窗口的舞台上有一个窗口(Window),接着呢就可以在窗口里绘制页面。所以正是因为有很多很多的舞台,在舞台上展示东西,这种模型就被称之为 Stage 模型

为什么 Stage 模型要用这种舞台机制呢?正是由于存在这种舞台机制,Ability 和 Window 就分隔开,它们之间就解耦了,将来在开发跨设备的应用时,就可以针对不同的设备对于窗口进行单独的裁剪,去适应不同的设备。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js 实现记住密码功能

这是我弄得一点源码 使用 js 记住密码 选了半天最后 选择了 js.cookie.min.js 实现的 当然 也加了一点 加密手段 用的 crypto-js 这个 自己封装了一下 感觉还行 以后能重复用的 二话不说 先放资源 : 这么多资源 不得给个赞 关注一下的 当然 最简单的就是…

拖拽式工作流开发有什么突出优势?

想要实现高效率的办公方式,可以试着了解低代码技术平台及拖拽式工作流开发的优势特点。具有好操作、好维护、够灵活、可视化界面操作等优势特点的低代码技术平台可以助力企业实现流程化办公,在发展越来越快速的今天,拖拽式工作流开发得到了很…

陪丨玩丨系丨统前后端开发流程,APP小程序H5前后端源码交付支持二开!多人语音,开黑,线上线下两套操作可在一个系统完成!

100%全部源码出售 官网源码APP源码 管理系统源码 终身免费售后 产品免费更新 产品更新频率高 让您时刻立足于行业前沿 软件开发流程步骤及其作用: 软件开发是一个复杂而系统的过程,涉及多个环节,以下是软件开发的主要流程步骤及其作用…

小程序使用阿里巴巴矢量图标库

一、登录官网 www.iconfont.cn 二、在搜索框中搜索想要的图标,将鼠标移动到图标上会看到三个标记 可以使用下载,直接使用: 可以使用css文件使用: 首先点击购物车样式的选项,而后点击下图位置: 点击自己创…

怎么排查K8S容器当中的Java程序内存泄露问题

今天早上发现生产线其中的一个服务在凌晨的时候突然重启了,内存突然从1G升到1.8G,CPU使用量从0.1升到了0.28,说明在这个时间点,内存突增达到了限额以上,服务重启了。因为这个服务布署了多节点,这次重启对业…

实验7:路由冗余协议HSRP配置管理(课内实验以及解答)

实验目的及要求: 理解首跳冗余协议(FHRP)的工作原理,掌握热备份路由器协议 (HSRP)(思科私有协议)原理和配置。能够实现网络终端设备虚拟网关的配置和网络故障的灵活切换,完成相应网络的联通性测…

ubuntu samba 安装与配置

ubuntu samba 安装与配置 一:安装二:添加samba访问账号及密码三:修改配置文件四:重启服务五:登录 一:安装 sudo apt update sudo apt install samba samba-common二:添加samba访问账号及密码 …

链表与模拟LinkedList的实现

1. ArrayList的缺陷 ArrayList底层使用数组来存储元素 由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后 搬移,时间复杂度为O(n),效率比较低。因此ArrayList不适合做任意位…

Restful API 具体设计规范(概述)

协议 https 域名 https://www.baidu.com/api 版本 https://www.baidu.com/v1 路径 https://www.baidu.com/v1/blogs 方法 数据过滤 状态码返回结果 返回的数据格式 尽量使用 JSON,避免使用 XML。 总结: 看 url 就知道要什么看 http method 就知道干…

【面试经典 150 | 二叉树】二叉搜索树迭代器

文章目录 写在前面Tag题目来源解题思路方法一:中序遍历到数组方法二:迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本…

记录wordpress网站搭建及当天被SEO优化收录

网站是前不就前搭建的,但是一直没有做SEO优化,今天花了点时间做下优化。记录下,喜欢的朋友点赞收藏下。 1.wordpress后台下载插件Yoast SEO插件,setting中搜索XML sitemaps,点view the XML sitemap,暂时不…

【Ant-Desgin 头像上传框】限制数量为1张图片,base64,其他需求可以改我组件中的代码

Ant-Desgin 头像上传框 样式图参数主要代码UpLoad 组件父组件 样式图 图片数量限制为1,当选择了图片后,需要切换图像时需点击头像完成切换 参数 /*** description: 图片上传组件* param {*} action: 上传地址* param {*} width: 宽度* param {*} height…

【网络技术】【Kali Linux】Wireshark嗅探(十一)以太网Ethernet协议报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客: 【网络技术】【Kali Linux】Wireshark嗅探(一)ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探(二)TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

Eagle for Mac:强大的图片管理工具

Eagle for Mac是一款专为Mac用户设计的图片管理工具,旨在帮助用户更高效、有序地管理和查找图片资源。 Eagle for Mac v1.9.2中文版下载 Eagle支持多种图片格式,包括JPG、PNG、GIF、SVG、PSD、AI等,无论是矢量图还是位图,都能以清…

SnapGene Mac v5.3.1中文激活版:综合性分子生物学软件

SnapGene Mac是一款功能全面、操作便捷的综合性分子生物学软件,专为Mac用户打造。它集成了DNA序列编辑、分析、可视化和团队协作等多种功能,为科研人员提供了一个高效、可靠的分子生物学研究工具。 SnapGene Mac v5.3.1中文激活版下载 在SnapGene Mac中&…

Spring Boot 3.2.5 集成 MyBatisPlus

前置条件&#xff0c;先连接好数据库&#xff0c;并且数据库里新建表插入几条数据 连接mysql传送门 版本 Spring Boot 3.2.5 第一步&#xff0c;添加依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-start…

短视频矩阵营销系统 poihuoqu 任意文件读取漏洞复现

0x01 产品简介 短视频矩阵营销系统是由北京华益云数据科技有限公司开发的一款产品,这家公司专注于抖音短视频矩阵营销系统的研发,致力于为企业提供全方位的短视频营销解决方案。华益云抖销短视频矩阵系统可以帮助企业快速搭建多个短视频账号,实现内容的批量制作和发布,提高…

vue echarts折线图 折线堆积图和折线面积图

vue echarts折线图 折线堆积图和折线面积图 1、折线堆积图和折线面积图的结合&#xff1b; 上代码 <template><section><divid"performaceLineChart"ref"performaceLineChartRef"style"width: 100%; height: 500px"></d…

CasinoRoyale靶机练习实践报告

CasinoRoyale靶机练习实践报告 下载地址: https://drive.google.com/open?id1FYP246L63zShV00wOckAQ5F5XJ4HkZ0Lhttps://download.vulnhub.com/casinoroyale/CasinoRoyale.ovahttps://download.vulnhub.com/casinoroyale/CasinoRoyale.ova.torrent ( Magnet) 1 安装靶机 …

分布式WEB应用中会话管理的变迁之路

Session一词直译为“会话”&#xff0c;意指有始有终的一系列动作&#xff0f;消息。Session是Web应用蓬勃发展的产物之一&#xff0c;在Web应用中隐含有“面向连接”和“状态保持”两个含义&#xff0c;同时也指代了Web服务器与客户端之间进行状态保持的解决方案。 在Web应用…