0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙中Stage模型与FA模型详解

HarmonyOS解决方案 来源:HarmonyOS解决方案 作者:HarmonyOS解决方案 2025-07-07 11:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

##鸿蒙开发能力 ##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。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    60

    文章

    2853

    浏览量

    45340
  • Harmony
    +关注

    关注

    0

    文章

    108

    浏览量

    3484
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    小白必看:模型静态测试效率翻倍——MXAM详解#simulink #Siumlink模型测试

    模型
    北汇信息POLELINK
    发布于 :2025年10月24日 18:03:11

    鸿蒙开发API9 到 API12,有哪些不同

    ,可以从一些第三方网站中下载 二、Model API9支持Stage模型FA模型两种,API12已经移除了相关选择,默认就是Stage
    发表于 06-29 22:47

    【HarmonyOS 5】鸿蒙的UIAbility详解(三)

    【HarmonyOS 5】鸿蒙的UIAbility详解(三) ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用
    的头像 发表于 06-14 22:32 467次阅读

    FA模型的DataAbility的切换介绍

    DataAbility切换 FA模型的DataAbility对应Stage模型的DataS
    发表于 06-06 08:10

    FA模型卡片和Stage模型卡片切换

    卡片切换 卡片切换主要包含如下三部分: 卡片页面布局:FA模型卡片和Stage模型卡片的布局都采用类web范式开发可以直接复用。 卡片配置文件:
    发表于 06-06 08:10

    FA模型Stage模型API切换概述

    API切换概述 FA模型Stage模型由于线程模型和进程模型的差异,部分接口仅在
    发表于 06-06 06:29

    FA模型切换到Stage模型时:module的切换说明

    升级到Stage模型时,Stage模型的name需要和FA模型的package保持一致,否则会导
    发表于 06-05 08:16

    FA模型的ServiceAbility的切换介绍

    ServiceAbility切换 FA模型的ServiceAbility对应Stage模型
    发表于 06-05 07:24

    PageAbility切换为UIAbility的方法

    PageAbility切换 FA模型PageAbility对应Stage模型的UIAbil
    发表于 06-05 06:07

    FA模型绑定Stage模型ServiceExtensionAbility介绍

    FA模型绑定Stage模型ServiceExtensionAbility 本文介绍FA模型的三
    发表于 06-04 07:55

    FA模型访问Stage模型DataShareExtensionAbility说明

    FA模型访问Stage模型DataShareExtensionAbility 概述 无论FA模型
    发表于 06-04 07:53

    Stage模型绑定FA模型ServiceAbility的方法

    Stage模型绑定FA模型ServiceAbility 本小节介绍Stage模型的两种应用组件
    发表于 06-04 06:54

    Stage模型启动FA模型PageAbility方法

    Stage模型启动FA模型PageAbility 本小节介绍Stage模型的两种应用组件如何启
    发表于 06-04 06:36

    如何将一个FA模型开发的声明式范式应用切换到Stage模型

    Widget在FA为FormAbility,在Stage为FormExtensionAbility)。 API切换:将FA
    发表于 06-04 06:22

    KaihongOS操作系统FA模型Stage模型介绍

    FA模型Stage模型介绍 KaihongOS操作系统FA
    发表于 04-24 07:27