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

【Harmony OS - Stage应用模型】

基本概念

大类分为: Ability Module: 功能模块 、Library Module: 共享功能模块

编译时概念:
Ability Module在编译时打包生成HAP(Harmony Ability Package),一个应用可能会有多个HAP,但是只能有且只有一个Entry HAP,其他都是Feature HAP,并且可以引用HSP (Harmony Share Package: 由Library Module编译生产)的模块,最后通过Bundle打包生成一个APP(Bundle Name唯一标识)。
运行时概念:
在移动端运行的时候,会创建一个AbilityStage舞台,里面主要是UIAbility(主要能力)和ExtensionAbility(拓展能力),每一个UIAbility实例会绑定一个WindowStage的舞台,并在上面创建一个Window窗口进行UI展示
在这里插入图片描述
在这里插入图片描述

配置文件

AppScope/app.json5中的是整个app应用的配置文件
entry/src/main/module.json5是当前这个模块的配置文件,当有多个模块的时候,每一个都会生成一个这样的文件
在这里插入图片描述

UIAbility的生命周期

根据上面运行时概念能看出,在我们打开应用时,在创建Ability实例之后,展示应用之前会先创建一个AbilityStage的生命周期,在该时期会创建多个Ability实例,其中应用界面主要是在UIAbility中创建,然后在其的windowStage所创建的Window窗口中进行渲染展示。
在这里插入图片描述

页面/组件的生命周期

@Component修饰的是组件, @Entry修饰的是页面(页面也是一个组件,也需要@Component修饰)
组件生命周期: aboutToAppear、aboutToDisappear
页面生命周期: aboutToAppear、build、onPageShow、onBackPress(后退键)、onPageHide、aboutToDisappear
所有组件执行顺序都是: 创建组件实例、执行build 当build中的子组件也执行完成之后,才会调用onPageShow,然后显示页面
在这里插入图片描述

UIAbility的启动模式

singleton(默认启动): 单实例模式,首次打开应用会创建一个实例,后续在不销毁的情况下,打开都是同一个实例
standard: 每次打开应用都会新创建一个实例,导致在内存中一个应用同时会出现多个任务列表
multiton: 每次打开都会重新创建一个实例,但是会销毁之前创建的实例,在内存中只有一个全新的实例
specified: 通过设置key来指定是否需要创建实例,如果key对应已经有实例就复用,没有就重新创建。比如文本编辑器,同时编辑多个文档的时候
singleton是单实例,其他都是多实例

UIAbility的相互切换

specified模式通常在多个UIAbility的相互切换的场景,主要有以下三个步骤:
1、当前Ability通过调用startAbility方法来拉起目标Ability
1.1 获取应用上下午
1.2 配置要调整的目标Ability的参赛
1.3 调用方法拉起对应Ability
在这里插入图片描述

2、在etc文件夹下新建一个AbilityStage的ts文件,在该AbilityStage文件的生命周期onAcceptWant中为目标Ability生成唯一表示的key,可以使用want传递的instanceKey,也可以自己拼接
在这里插入图片描述

3、在模块的module.json5配置文件中,通过配置srcEntry来让第二步创建的AbilityStage配置生效
在这里插入图片描述

相关文章:

  • Mybatis-Plus中怎么使用MySQL的内置函数
  • DevOps系列之 JNI实现Java调用C的实现案例
  • 负载均衡概述
  • 微服务(1)
  • ROS学习记录:使用RViz观测激光雷达传感器数据
  • Hive中支持毫秒级别的时间精度
  • 浅谈冯诺依曼体系和操作系统
  • SQL 解析 — 如何轻松实现新增语句
  • vite+Vue3学习笔记(3)——界面设计
  • Mybatis Java API - SqlSessionFactoryBuilder
  • 【ROS2】MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点
  • SSH 端口转发:如何将服务绑定到本地 IP 地址
  • 观察者模式概述
  • 基于rk3568 Android H265推流SRS低延迟网页播放方案
  • Node.js--》node环境配置及nvm和nvm-desktop安装教程
  • [译]前端离线指南(上)
  • __proto__ 和 prototype的关系
  • Babel配置的不完全指南
  • supervisor 永不挂掉的进程 安装以及使用
  • TypeScript实现数据结构(一)栈,队列,链表
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 产品三维模型在线预览
  • 翻译--Thinking in React
  • 服务器从安装到部署全过程(二)
  • 给初学者:JavaScript 中数组操作注意点
  • 回流、重绘及其优化
  • 聚簇索引和非聚簇索引
  • 入口文件开始,分析Vue源码实现
  • 事件委托的小应用
  • 在Docker Swarm上部署Apache Storm:第1部分
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 数据库巡检项
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (独孤九剑)--文件系统
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (黑马点评)二、短信登录功能实现
  • (三分钟)速览传统边缘检测算子
  • (十一)图像的罗伯特梯度锐化
  • (实战篇)如何缓存数据
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转) Face-Resources
  • (转)fock函数详解
  • .htaccess 强制https 单独排除某个目录
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 依赖注入和配置系统
  • .net反编译的九款神器
  • .NET学习教程二——.net基础定义+VS常用设置
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成