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

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言

在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility

FA大概是API7之前的开发模型。所谓的开发模型,值得是创建鸿蒙开发工程后,你在什么样子的系统容器和接口上进行开发。

当初我在开发OpenHarmony的时候,最早用的就是FA模型,正是因为FA模型在开发过程中的诸多不方便,大概在API8时,官方推出了Stage模型,进行初步替代。

Stage模型,见名知意,是在系统提供的舞台容器上,进行应用的开发。整理更新的低耦合,高内聚。应用进程的管理也更加合理高效。

本文主要针对Stage模型与FA模型的区别。以及Stage模型如何获取上下文作出讲解。

二、Stage模型与FA模型的核心区别

下面的表格是官方文档的信息梳理,建议针对FA模型有大概了解即可。重点关注Stage模型的内容。

特性Stage模型(推荐)FA模型(旧版)
应用单元AbilityStage为基础,通过UIAbility管理UI组件FeatureAbilityPageAbility为主
上下文获取通过组件context属性或@ohos.app.ability.Context使用featureAbility.getContext()
生命周期管理基于UIAbility的生命周期回调(onCreate/onDestroy基于FeatureAbility的生命周期

在HarmonyOS 5 的Stage模型开发中,featureAbility属于过时的FA模型接口,必须通过组件或UIAbilitycontext属性获取上下文。这一变化体现了Stage模型“一切皆组件”的设计思想,确保代码结构更简洁、组件化更彻底,同时避免与旧版API的耦合。

三、Stage模型中正确的上下文获取方式

在Stage模型中,组件的上下文(Context)直接通过组件实例的context属性获取,无需通过featureAbility

代码示例:
// Stage模型中,组件内直接通过this.context获取上下文
@Entry
@Component
struct FileStorageDemo {// 文件写入async writeToFile() {try {// 正确方式:使用组件的context属性const filesDir = await this.context.getFilesDir(); const filePath = `${filesDir}/example.txt`;const fd = await fileio.open(filePath, 0o102); // 0o102表示写入模式(O_WRONLY | O_CREAT)const data = 'Stage模型下的文件存储示例';await fileio.write(fd, data);await fileio.close(fd);console.log('文件写入成功');} catch (error) {console.error('文件写入失败:', error);}}// 文件读取async readFromFile() {try {const filesDir = await this.context.getFilesDir(); const filePath = `${filesDir}/example.txt`;const fd = await fileio.open(filePath, 0o100); // 0o100表示读取模式(O_RDONLY)const buffer = new ArrayBuffer(1024);const bytesRead = await fileio.read(fd, buffer);const data = new TextDecoder('utf-8').decode(buffer.slice(0, bytesRead));await fileio.close(fd);console.log('文件内容:', data);} catch (error) {console.error('文件读取失败:', error);}}build() {Column() {Button('写入文件').onClick(() => this.writeToFile())Button('读取文件').onClick(() => this.writeToFile())}}
}

上下文获取原则
组件内直接使用this.context(继承自Component的上下文属性)。
UIAbility中使用this.context(代表当前Ability的上下文)。
避免使用任何以featureAbility开头的旧版API。

http://www.dtcms.com/a/240455.html

相关文章:

  • Qt 事件处理中 return 的深入解析
  • The Trade Desk推出DealDesk,试图让交易ID不再糟糕
  • 医疗领域双折射效应分析遇瓶颈?OAS 光学软件开辟新径
  • PolyU Palmprint Database掌纹识别数据集预处理(踩坑版)
  • DCMTKOpenCV-构建DICOM图像查看器
  • Linux中《基础IO》详细介绍
  • 开发一套外卖系统软件需要多少钱?
  • Java中HashMap底层原理深度解析:从数据结构到红黑树优化
  • 详解K8s 1.33原地扩缩容功能:原理、实践、局限与发展
  • 66、RFID是什么?
  • 06 Deep learning神经网络编程基础 激活函数 --吴恩达
  • Yolov8 目标检测蒸馏学习记录
  • RocketMQ基础命令
  • 魔兽世界正式服插件与宏-敏锐盗贼实用宏探索(2)-起手奥义【突】之见龙在田
  • C++11 constexpr和字面类型:从入门到精通
  • CMS内容管理系统的设计与实现:多站点模式的实现
  • 关于英语中是否存在类似中文回文词诗的作品?
  • 【生产就曲篇】让应用可观测:Actuator监控端点与日志最佳实践
  • 迁移达梦数据库过程中,如何快速识别需要改写的Mapper SQL方法
  • 架构设计之存储高性能——非关系型数据库(NoSQL)
  • Linux文件管理和输入输出重定向
  • leetcodeSQL解题:3564. 季节性销售分析
  • 深度解析 Linux 内核参数 net.ipv4.tcp_rmem:优化网络性能的关键
  • Android Test4 Application(Context)实例的获取
  • AI 导游:开启智能旅游新时代
  • 21-Oracle 23 ai-Automatic SQL Plan Management(SPM)
  • 数据结构篇--分离链表vs线性探测
  • 深入理解Spring Boot中的Filter机制:原理、注册与实战应用
  • 数据结构-文件
  • 怎么让Comfyui导出的图像不包含工作流信息,