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

简介: FA大概是API7之前的开发模型。所谓的开发模型,值得是创建鸿蒙开发工程后,你在什么样子的系统容器和接口上进行开发。当初我在开发OpenHarmony的时候,最早用的就是FA模型,正是因为FA模型在开发过程中的诸多不方便,大概在API8时,官方推出了Stage模型,进行初步替代。Stage模型,见名知意,是在系统提供的舞台容器上,进行应用的开发。整理更新的低耦合,高内聚。应用进程的管理也更加合理高效。本文主要针对Stage模型与FA模型的区别。以及Stage模型如何获取上下文作出讲解。

##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财#

一、前言

在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。

目录
相关文章
|
移动开发 安全 Android开发
【HarmonyOS 5】鸿蒙mPaaS详解
mPaaS 是 Mobile Platform as a Service 的缩写,即移动开发平台。
349 0
|
缓存 数据安全/隐私保护 JavaScript
【HarmonyOS 5】鸿蒙页面和组件生命周期函数
【HarmonyOS 5】鸿蒙页面和组件生命周期函数
206 0
|
4月前
|
物联网 开发工具
【HarmonyOS】鸿蒙应用蓝牙功能实现 (二)
【HarmonyOS】鸿蒙应用蓝牙功能实现 (二)
129 9
【HarmonyOS】鸿蒙应用蓝牙功能实现 (二)
|
4月前
|
JavaScript 开发工具 开发者
【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例
【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例
134 3
|
4月前
|
前端开发 JavaScript API
【HarmonyOS 5】鸿蒙跨平台开发方案详解(一)
2025年是鸿蒙生态迎来关键发展期。根据前几天的2025 HDC数据显示,鸿蒙原生应用数量已从2024年的2000款增长至5000款,微信鸿蒙版安装量突破1.2亿,公安部交管系统完成全国300城鸿蒙适配。
344 1
|
4月前
|
开发工具
【HarmonyOS 5】使用openCustomDialog如何禁止手势关闭的方案
openCustomDialog提供了onWillDismiss回调函数,当用户尝试通过滑动、点击外部、返回键等操作关闭弹窗时,会触发该回调。通过在回调中判断关闭原因并拦截操作,即可实现禁止手势关闭的效果。
145 1
|
4月前
|
存储 安全 API
【HarmonyOS 5】鸿蒙应用隐私保护详解
【HarmonyOS 5】鸿蒙应用隐私保护详解
185 1
|
4月前
|
开发工具 开发者
【HarmonyOS 5】鸿蒙中的UIAbility详解(二)
singleton(单实例模式),说人话就是单例模式,App任务进度中该UIAbilty只能存在一个。 multiton(多实例模式),说人话就是单例模式,App任务进度中该UIAbilty能存在多个。 specified(指定实例模式),这玩意就有点复杂了,参见下图,主要通过唯一标识key来作为判断量,看该UIAbility是创建新的,还是使用已创建的。
180 0
|
4月前
|
监控 JavaScript 开发工具
【HarmonyOS 5】鸿蒙中@State的原理详解
@State 是 HarmonyOS ArkTS 框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动 UI 的响应式编程模式。通过将变量标记为 @State,开发者可以确保当状态值发生变化时,依赖该状态的 UI 组件会自动重新渲染,从而保持数据与界面的实时同步。 @State 是 HarmonyOS ArkTS 实现响应式编程的大基础核心,可以说整个V1和V2都是围绕它来进行组合使用。
206 0
|
4月前
|
传感器 自动驾驶 物联网
【HarmonyOS 5】鸿蒙星闪NearLink详解
鸿蒙星闪NearLink Kit 是 HarmonyOS 提供的短距离通信服务,支持星闪设备间的连接、数据交互。例如,手机可作为中心设备与外围设备(如鼠标、手写笔、智能家电、车钥匙等)通过星闪进行连接。
155 0