一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙中Stage模型與FA模型詳解

HarmonyOS解決方案 ? 來(lái)源:HarmonyOS解決方案 ? 作者:HarmonyOS解決方案 ? 2025-07-07 11:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

HarmonyOS 5】鴻蒙中Stage模型與FA模型詳解

##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類(lèi)應(yīng)用 (金融理財(cái)#

一、前言

在HarmonyOS 5的應(yīng)用開(kāi)發(fā)模型中, featureAbility是舊版FA模型(Feature Ability)的用法 ,Stage模型已采用全新的應(yīng)用架構(gòu),推薦使用 組件化的上下文獲取方式 ,而非依賴(lài)featureAbility。

FA大概是API7之前的開(kāi)發(fā)模型。所謂的開(kāi)發(fā)模型,值得是創(chuàng)建鴻蒙開(kāi)發(fā)工程后,你在什么樣子的系統(tǒng)容器和接口上進(jìn)行開(kāi)發(fā)。

當(dāng)初我在開(kāi)發(fā)OpenHarmony的時(shí)候,最早用的就是FA模型,正是因?yàn)镕A模型在開(kāi)發(fā)過(guò)程中的諸多不方便,大概在API8時(shí),官方推出了Stage模型,進(jìn)行初步替代。

Stage模型,見(jiàn)名知意,是在系統(tǒng)提供的舞臺(tái)容器上,進(jìn)行應(yīng)用的開(kāi)發(fā)。整理更新的低耦合,高內(nèi)聚。應(yīng)用進(jìn)程的管理也更加合理高效。

本文主要針對(duì)Stage模型與FA模型的區(qū)別。以及Stage模型如何獲取上下文作出講解。

二、Stage模型與FA模型的核心區(qū)別

下面的表格是官方文檔的信息梳理,建議針對(duì)FA模型有大概了解即可。重點(diǎn)關(guān)注Stage模型的內(nèi)容。

特性Stage模型(推薦)FA模型(舊版)
應(yīng)用單元AbilityStage為基礎(chǔ),通過(guò)UIAbility管理UI組件FeatureAbilityPageAbility為主
上下文獲取通過(guò)組件context屬性或@ohos.app.ability.Context使用featureAbility.getContext()
生命周期管理基于UIAbility的生命周期回調(diào)(onCreate/onDestroy基于FeatureAbility的生命周期

在HarmonyOS 5 的Stage模型開(kāi)發(fā)中, featureAbility屬于過(guò)時(shí)的FA模型接口 ,必須通過(guò)組件或UIAbilitycontext屬性獲取上下文。這一變化體現(xiàn)了Stage模型“一切皆組件”的設(shè)計(jì)思想,確保代碼結(jié)構(gòu)更簡(jiǎn)潔、組件化更徹底,同時(shí)避免與舊版API的耦合。

三、Stage模型中正確的上下文獲取方式

在Stage模型中, 組件的上下文(Context)直接通過(guò)組件實(shí)例的context屬性獲取 ,無(wú)需通過(guò)featureAbility。

代碼示例:

// Stage模型中,組件內(nèi)直接通過(guò)this.context獲取上下文
@Entry
@Component
struct FileStorageDemo {
  // 文件寫(xiě)入
  async writeToFile() {
    try {
      // 正確方式:使用組件的context屬性
      const filesDir = await this.context.getFilesDir(); 
      const filePath = `${filesDir}/example.txt`;
      const fd = await fileio.open(filePath, 0o102); // 0o102表示寫(xiě)入模式(O_WRONLY | O_CREAT)
      const data = 'Stage模型下的文件存儲(chǔ)示例';
      await fileio.write(fd, data);
      await fileio.close(fd);
      console.log('文件寫(xiě)入成功');
    } catch (error) {
      console.error('文件寫(xiě)入失敗:', 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('文件內(nèi)容:', data);
    } catch (error) {
      console.error('文件讀取失敗:', error);
    }
  }

  build() {
    Column() {
      Button('寫(xiě)入文件').onClick(() = > this.writeToFile())
      Button('讀取文件').onClick(() = > this.writeToFile())
    }
  }
}

上下文獲取原則
組件內(nèi)直接使用this.context(繼承自Component的上下文屬性)。
UIAbility中使用this.context(代表當(dāng)前Ability的上下文)。
避免使用任何以featureAbility開(kāi)頭的舊版API。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2620

    瀏覽量

    44063
  • Harmony
    +關(guān)注

    關(guān)注

    0

    文章

    108

    瀏覽量

    3021
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙開(kāi)發(fā)API9 到 API12,有哪些不同

    ,可以從一些第三方網(wǎng)站中下載 二、Model API9支持Stage模型FA模型兩種,API12已經(jīng)移除了相關(guān)選擇,默認(rèn)就是Stage
    發(fā)表于 06-29 22:47

    FA模型的DataAbility的切換介紹

    DataAbility切換 FA模型的DataAbility對(duì)應(yīng)Stage模型的DataS
    發(fā)表于 06-06 08:10

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

    卡片切換 卡片切換主要包含如下三部分: 卡片頁(yè)面布局:FA模型卡片和Stage模型卡片的布局都采用類(lèi)web范式開(kāi)發(fā)可以直接復(fù)用。 卡片配置文件:
    發(fā)表于 06-06 08:10

    FA模型Stage模型API切換概述

    API切換概述 FA模型Stage模型由于線程模型和進(jìn)程模型的差異,部分接口僅在
    發(fā)表于 06-06 06:29

    FA模型切換到Stage模型時(shí):module的切換說(shuō)明

    升級(jí)到Stage模型時(shí),Stage模型的name需要和FA模型的package保持一致,否則會(huì)導(dǎo)
    發(fā)表于 06-05 08:16

    FA模型的ServiceAbility的切換介紹

    ServiceAbility切換 FA模型的ServiceAbility對(duì)應(yīng)Stage模型
    發(fā)表于 06-05 07:24

    PageAbility切換為UIAbility的方法

    PageAbility切換 FA模型PageAbility對(duì)應(yīng)Stage模型的UIAbil
    發(fā)表于 06-05 06:07

    FA模型綁定Stage模型ServiceExtensionAbility介紹

    FA模型綁定Stage模型ServiceExtensionAbility 本文介紹FA模型的三
    發(fā)表于 06-04 07:55

    FA模型訪問(wèn)Stage模型DataShareExtensionAbility說(shuō)明

    FA模型訪問(wèn)Stage模型DataShareExtensionAbility 概述 無(wú)論FA模型
    發(fā)表于 06-04 07:53

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

    Stage模型綁定FA模型ServiceAbility 本小節(jié)介紹Stage模型的兩種應(yīng)用組件
    發(fā)表于 06-04 06:54

    Stage模型啟動(dòng)FA模型PageAbility方法

    Stage模型啟動(dòng)FA模型PageAbility 本小節(jié)介紹Stage模型的兩種應(yīng)用組件如何啟
    發(fā)表于 06-04 06:36

    如何將一個(gè)FA模型開(kāi)發(fā)的聲明式范式應(yīng)用切換到Stage模型

    Widget在FA為FormAbility,在Stage為FormExtensionAbility)。 API切換:將FA
    發(fā)表于 06-04 06:22

    KaihongOS操作系統(tǒng)FA模型Stage模型介紹

    FA模型Stage模型介紹 KaihongOS操作系統(tǒng),FA
    發(fā)表于 04-24 07:27

    OSI七層模型詳解 OSI七層模型與TCP/IP模型比較

    詳解,以及與TCP/IP模型的比較: OSI七層模型詳解 物理層 : 負(fù)責(zé)傳輸比特流,即原始的電信號(hào)或光信號(hào)。 定義了物理設(shè)備、傳輸介質(zhì)、信號(hào)類(lèi)型、接口標(biāo)準(zhǔn)等。 主要功能包括建立、維
    的頭像 發(fā)表于 11-24 10:44 ?1207次閱讀

    Proteus74138找不到仿真模型

    Proteus74138找不到仿真模型,出現(xiàn)No model specified for l1. Simulation FA,lLED due to partition analysis error[s].
    發(fā)表于 08-04 18:01