写点什么

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

作者:GeorgeGcs
  • 2025-06-19
    上海
  • 本文字数:1343 字

    阅读完需:约 4 分钟

##鸿蒙开发能力 ##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 模型的内容。



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

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

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

代码示例:

// Stage模型中,组件内直接通过this.context获取上下文@Entry@Componentstruct 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。

用户头像

GeorgeGcs

关注

路漫漫其修远兮,吾将上下而求索。 2024-12-24 加入

鸿蒙创作先锋,华为HDE专家,鸿蒙讲师,作者。 目前任职鸿蒙应用架构师。历经腾讯,宝马,研究所,金融。 待过私企,外企,央企。 深耕大应用开发领域十年。 OpenHarmony,HarmonyOS,Flutter,H5,Android,IOS。

评论

发布
暂无评论
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解_HarmonyOS_GeorgeGcs_InfoQ写作社区