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

OpenHarmony Ability“全家桶”彻底拆解:从UIAbility到ExtensionAbility一文说清楚

1. 模型定位与演进

方向 FA(API≤8) Stage(API≥9)
设计目标 轻量化单设备 复杂多设备、低内存、原生分布式
核心思想 Ability = UI + 业务 UI 与 Ability 解耦,统一进程共享引擎,组件级迁移
能力边界 固定三种 Ability 可无限派生 ExtensionAbility,系统能力即插即用

FA 模型中固定的 Page、Service、Data 三种类型不同,
Stage 模型将 Ability 主要分为两大类:UIAbility 和ExtensionAbility

OpenHarmony 自 API 9 版本起引入了全新的应用模型——Stage 模型,它标志着 OpenHarmony 应用开发框架的一次重大演进,后面版本都是主推Stage模型
在这里插入图片描述

2. 架构总览

2.1 进程与 VM

  • 统一主进程:同一 Bundle 内所有 UIAbility + ServiceExtensionAbility + DataShareExtensionAbility 共享 1 个 ArkTS 引擎
  • 独立进程(可配置):Form、InputMethod、Wallpaper、WebView 渲染进程等,崩溃隔离 & 权限最小化。

2.2 生命周期解耦

UIAbility 生命周期:Create → Foreground → Background → Destroy
WindowStage 生命周期:Create → SHOWN/RESUMED → PAUSED → HIDDEN → Destroy

进入多任务仅 WindowStage 触发 PAUSED,UIAbility 仍 Foreground → 可继续播放音频。


3. Ability 分类与职责

3.1 UIAbility(有界面)

UIAbility 作为 Stage 模型中承载用户界面的核心组件,是构建任何 OpenHarmony 应用的基础。它不仅是应用与用户进行视觉和交互沟通的桥梁,也是应用生命周期管理的关键节点。一个应用可以包含一个或多个 UIAbility,每个
UIAbility 实例都对应一个独立的任务栈,负责管理其内部页面的导航和状态。深入理解 UIAbility
的核心概念、生命周期、应用场景以及启动模式。

回调 触发时机 必做/禁做
onCreate(want) 实例新建 只读一次性初始化;禁止 loadContent
onWindowStageCreate(ws) 窗口 ready 必须 ws.loadContent();获取 Window 对象
onForeground() 切到前台 申请相机、定位等“可见时才需”资源
onBackground() 切到后台 释放相机、停止动画;可持久化数据
onNewWant(want) 热启动再次调用 解析参数并刷新 UI
onWindowStageDestroy() 窗口即将销毁 反注册窗口监听器
onDestroy() 实例即将销毁 释放所有资源、注销监听器
启动模式(module.json5 字段 launchType
  • standard:每次 startAbility 新建实例 → 多窗口浏览器
  • singleton:全局唯一;再次启动清栈置顶 → 登录页、设置页
  • specified:系统先回调 AbilityStage.onAcceptWant(want) → 返回 Key;相同 Key 复用实例 → 文档编辑器“同一文件单实例”

3.2 ExtensionAbility(无UI界面,派生类)

派生类 专属回
http://www.xdnf.cn/news/1448101.html

相关文章:

  • LeetCode 1537.最大得分
  • 残差连接的概念与作用
  • 蓝桥杯算法之基础知识(6)
  • Netty从0到1系列之Channel
  • 【 线段树】P12347 [蓝桥杯 2025 省 A 第二场] 栈与乘积|普及+
  • 基于 HTML、CSS 和 JavaScript 的智能图像灰度直方图分析系统
  • HTML全屏功能实现汇总
  • npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR!
  • 求单源最短路(Dijkstra 算法-迪杰斯特拉算法,SPFA)
  • 【Unity基础】两个关于UGUI中Text对非英文字体支持的问题
  • SpringAI应用开发面试全流程:技术原理、架构优化与企业场景解析
  • 复写零(双指针)
  • JavaScript学习最后一章节(小练习)
  • 如何解决虚拟机网络连接问题:配置固定 IP 篇
  • Spring Authorization Server 1.5.2 使用YML配置的方式,最常用法总结
  • 【算法--链表】141.环形链表(通俗讲解链表中是否有环)
  • 分布式AI算力系统番外篇-----超体的现世《星核》
  • 强化学习中的模仿学习是什么?
  • 相关性分析与常用相关系数
  • react的 hooks 是如何存储的
  • HTML第七课:发展史
  • Streamlit 数据看板模板:非前端选手快速搭建 Python 数据可视化交互看板的实用工具
  • 如何画时序图、流程图
  • android集成unity后动态导入 assetsBundle
  • Android创建demo脚本
  • CSS中使用 HSL(Hue, Saturation, Lightness) 动态生成色值
  • Linux 对目录授予用户读写权限的方法
  • 信创MySQL到达梦数据库的SQL语法转换技术解析
  • AWK命令完全指南:从理论到实战的文本处理利器
  • Spring Boot + Nacos 配置中心示例工程