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

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

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

鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件與UI的數(shù)據(jù)同步】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-03 10:26 ? 次閱讀

UIAbility組件與UI的數(shù)據(jù)同步

基于當(dāng)前的應(yīng)用模型,可以通過(guò)以下幾種方式來(lái)實(shí)現(xiàn)UIAbility組件與UI之間的數(shù)據(jù)同步。

  • [使用EventHub進(jìn)行數(shù)據(jù)通信]:在基類Context中提供了EventHub對(duì)象,可以通過(guò)發(fā)布訂閱方式來(lái)實(shí)現(xiàn)事件的傳遞。在事件傳遞前,訂閱者需要先進(jìn)行訂閱,當(dāng)發(fā)布者發(fā)布事件時(shí),訂閱者將接收到事件并進(jìn)行相應(yīng)處理。
  • [使用AppStorage/LocalStorage進(jìn)行數(shù)據(jù)同步]:ArkUI提供了AppStorage和LocalStorage兩種應(yīng)用級(jí)別的狀態(tài)管理方案,可用于實(shí)現(xiàn)應(yīng)用級(jí)別和UIAbility級(jí)別的數(shù)據(jù)同步。
  • 開發(fā)前請(qǐng)熟悉鴻蒙開發(fā)指導(dǎo)文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

使用EventHub進(jìn)行數(shù)據(jù)通信

[EventHub]為UIAbility組件提供了事件機(jī)制,使它們能夠進(jìn)行訂閱、取消訂閱和觸發(fā)事件等數(shù)據(jù)通信能力。

在[基類Context]中,提供了EventHub對(duì)象,可用于在UIAbility組件實(shí)例內(nèi)通信。使用EventHub實(shí)現(xiàn)UIAbility與UI之間的數(shù)據(jù)通信需要先獲取EventHub對(duì)象,本章節(jié)將以此為例進(jìn)行說(shuō)明。

  1. 在UIAbility中調(diào)用[eventHub.on()]方法注冊(cè)一個(gè)自定義事件“event1”,[eventHub.on()]有如下兩種調(diào)用方式,使用其中一種即可。
    import hilog from '@ohos.hilog';
    import UIAbility from '@ohos.app.ability.UIAbility';
    import type window from '@ohos.window';
    import type { Context } from '@ohos.abilityAccessCtrl';
    import Want from '@ohos.app.ability.Want'
    import type AbilityConstant from '@ohos.app.ability.AbilityConstant';
    
    const DOMAIN_NUMBER: number = 0xFF00;
    const TAG: string = '[EventAbility]';
    
    export default class EntryAbility extends UIAbility {
      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        // 獲取UIAbility實(shí)例的上下文
        let context = this.context;
        // 獲取eventHub
        let eventhub = this.context.eventHub;
        // 執(zhí)行訂閱操作
        eventhub.on('event1', this.eventFunc);
        eventhub.on('event1', (data: string) = > {
          // 觸發(fā)事件,完成相應(yīng)的業(yè)務(wù)操作
        });
        hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'Ability onCreate');
      }
      // ... 
      eventFunc(argOne: Context, argTwo: Context): void {
        hilog.info(DOMAIN_NUMBER, TAG, '1. ' + `${argOne}, ${argTwo}`);
        return;
      }
    }
    
  2. 在UI中通過(guò)[eventHub.emit()]方法觸發(fā)該事件,在觸發(fā)事件的同時(shí),根據(jù)需要傳入參數(shù)信息。
    import common from '@ohos.app.ability.common';
     import promptAction from '@ohos.promptAction';
    
     @Entry
     @Component
     struct Page_EventHub {
    
       private context = getContext(this) as common.UIAbilityContext;
    
       eventHubFunc() : void {
         // 不帶參數(shù)觸發(fā)自定義“event1”事件
         this.context.eventHub.emit('event1');
         // 帶1個(gè)參數(shù)觸發(fā)自定義“event1”事件
         this.context.eventHub.emit('event1', 1);
         // 帶2個(gè)參數(shù)觸發(fā)自定義“event1”事件
         this.context.eventHub.emit('event1', 2, 'test');
         // 開發(fā)者可以根據(jù)實(shí)際的業(yè)務(wù)場(chǎng)景設(shè)計(jì)事件傳遞的參數(shù)
       }
    
      build() {
        Column() {
          // ...
          List({ initialIndex: 0 }) {
            ListItem() {
              Row() {
                // ...
              }
              .onClick(() = > {
                this.eventHubFunc();
                promptAction.showToast({
                  message: $r('app.string.EventHubFuncA')
                });
              })
            }
            // ...
            ListItem() {
              Row() {
                // ...
              }
              .onClick(() = > {
                this.context.eventHub.off('event1');
                promptAction.showToast({
                  message: $r('app.string.EventHubFuncB')
                });
              })
            }
            // ...
          }
          // ...
        }
        // ...
      }
    }
    
  3. 在UIAbility的注冊(cè)事件回調(diào)中可以得到對(duì)應(yīng)的觸發(fā)事件結(jié)果,運(yùn)行日志結(jié)果如下所示。
    [Example].[Entry].[EntryAbility] 1. []
    [Example].[Entry].[EntryAbility] 1. [1]
    [Example].[Entry].[EntryAbility] 1. [2,"test"]
    
  4. 在自定義事件“event1”使用完成后,可以根據(jù)需要調(diào)用[eventHub.off()]方法取消該事件的訂閱。
    // context為UIAbility實(shí)例的AbilityContext
    this.context.eventHub.off('event1');
    
    `HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
    

新文檔.png

使用AppStorage/LocalStorage進(jìn)行數(shù)據(jù)同步

ArkUI提供了AppStorage和LocalStorage兩種應(yīng)用級(jí)別的狀態(tài)管理方案,可用于實(shí)現(xiàn)應(yīng)用級(jí)別和UIAbility級(jí)別的數(shù)據(jù)同步。使用這些方案可以方便地管理應(yīng)用狀態(tài),提高應(yīng)用性能和用戶體驗(yàn)。其中,AppStorage是一個(gè)全局的狀態(tài)管理器,適用于多個(gè)UIAbility共享同一狀態(tài)數(shù)據(jù)的情況;而LocalStorage則是一個(gè)局部的狀態(tài)管理器,適用于單個(gè)UIAbility內(nèi)部使用的狀態(tài)數(shù)據(jù)。通過(guò)這兩種方案,開發(fā)者可以更加靈活地控制應(yīng)用狀態(tài),提高應(yīng)用的可維護(hù)性和可擴(kuò)展性。詳細(xì)請(qǐng)參見[應(yīng)用級(jí)變量的狀態(tài)管理]。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)注

    0

    文章

    397

    瀏覽量

    17362
  • 數(shù)據(jù)同步
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    8147
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2291

    瀏覽量

    42633
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙Ability Kit程序框架服務(wù))【UIAbility組件生命周期】

    當(dāng)用戶打開、切換和返回到對(duì)應(yīng)應(yīng)用時(shí),應(yīng)用中的UIAbility實(shí)例會(huì)在其生命周期的不同狀態(tài)之間轉(zhuǎn)換。UIAbility類提供了一系列回調(diào),通過(guò)這些回調(diào)可以知道當(dāng)前UIAbility實(shí)例的某個(gè)狀態(tài)發(fā)生改變,會(huì)經(jīng)過(guò)
    的頭像 發(fā)表于 05-30 21:51 ?1324次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>組件</b>生命周期】

    鴻蒙Ability Kit程序框架服務(wù))【UIExtensionAbility】

    [UIExtensionAbility]是UI類型的ExtensionAbility組件,需要與[UIExtensionComponent]一起配合使用,開發(fā)者可以在UIAbility的頁(yè)面中通過(guò)
    的頭像 發(fā)表于 06-05 09:19 ?1204次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>)【UIExtensionAbility】

    鴻蒙開發(fā)-應(yīng)用程序框架UIAbility的使用

    UIAbility內(nèi)頁(yè)面的新建以及UIAbility內(nèi)頁(yè)面的跳轉(zhuǎn)和數(shù)據(jù)傳遞。 打開DevEco Studio,選擇一個(gè)Empty Ability工程模板,創(chuàng)建一個(gè)工程,例如命名為MyA
    發(fā)表于 01-17 16:36

    HarmonyOS/OpenHarmony應(yīng)用開發(fā)-Stage模型UIAbility組件使用(一)

    一、UIAbility組件概述1.概述 UIAbility組件是一種包含UI界面的應(yīng)用組件,主要
    發(fā)表于 06-28 10:32

    HarmonyOS/OpenHarmony應(yīng)用開發(fā)-Stage模型UIAbility組件使用(一)

    一、UIAbility組件概述1.概述 UIAbility組件是一種包含UI界面的應(yīng)用組件,主要
    發(fā)表于 06-28 10:32

    鴻蒙應(yīng)用模型:【Ability Kit】簡(jiǎn)介

    Ability Kit程序框架服務(wù))提供了應(yīng)用程序開發(fā)和運(yùn)行的應(yīng)用模型,是系統(tǒng)為開發(fā)者提供的應(yīng)
    的頭像 發(fā)表于 05-29 14:41 ?505次閱讀
    <b class='flag-5'>鴻蒙</b>應(yīng)用模型:【<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>】簡(jiǎn)介

    鴻蒙Ability Kit程序框架服務(wù))【UIAbility組件概述】

    UIAbility組件是一種包含UI的應(yīng)用組件,主要用于和用戶交互。
    的頭像 發(fā)表于 05-30 20:17 ?340次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>組件</b>概述】

    鴻蒙Ability Kit程序框架服務(wù))【UIAbility組件生命周期】實(shí)例

    本文檔主要描述了應(yīng)用運(yùn)行過(guò)程中UIAbility和自定義組件的生命周期。對(duì)于UIAbility,描述了Create、Foreground、Background、Destroy四種生命周期。對(duì)于頁(yè)面
    的頭像 發(fā)表于 05-31 15:03 ?932次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>組件</b>生命周期】實(shí)例

    鴻蒙Ability Kit程序框架服務(wù))【UIAbility組件啟動(dòng)模式】

    UIAbility的啟動(dòng)模式是指UIAbility實(shí)例在啟動(dòng)時(shí)的不同呈現(xiàn)狀態(tài)。針對(duì)不同的業(yè)務(wù)場(chǎng)景,系統(tǒng)提供了三種啟動(dòng)模式:
    的頭像 發(fā)表于 06-06 11:05 ?626次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>組件</b>啟動(dòng)模式】

    鴻蒙Ability Kit程序框架服務(wù))【UIAbility組件基本用法】

    UIAbility組件的基本用法包括:指定UIAbility的啟動(dòng)頁(yè)面以及獲取UIAbility的上下文[UIAbilityContext]。
    的頭像 發(fā)表于 06-06 11:02 ?365次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>組件</b>基本用法】

    鴻蒙Ability Kit程序框架服務(wù))【UIAbility組件間交互(設(shè)備內(nèi))】

    UIAbility是系統(tǒng)調(diào)度的最小單元。在設(shè)備內(nèi)的功能模塊之間跳轉(zhuǎn)時(shí),會(huì)涉及到啟動(dòng)特定的UIAbility,該UIAbility可以是應(yīng)用內(nèi)的其他UIAbility,也可以是其他應(yīng)用的
    的頭像 發(fā)表于 06-03 09:53 ?555次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>組件</b>間交互(設(shè)備內(nèi))】

    鴻蒙Ability Kit程序框架服務(wù))【UIAbility內(nèi)和UIAbility間頁(yè)面的跳轉(zhuǎn)】

    基于Stage模型下的UIAbility開發(fā),實(shí)現(xiàn)UIAbility內(nèi)和UIAbility間頁(yè)面的跳轉(zhuǎn)。
    的頭像 發(fā)表于 06-03 14:13 ?579次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>)【<b class='flag-5'>UIAbility</b>內(nèi)和<b class='flag-5'>UIAbility</b>間頁(yè)面的跳轉(zhuǎn)】

    鴻蒙Ability Kit程序框架服務(wù))【ExtensionAbility組件

    ExtensionAbility組件是基于特定場(chǎng)景(例如服務(wù)卡片、輸入法等)提供的應(yīng)用組件,以便滿足更多的使用場(chǎng)景。
    的頭像 發(fā)表于 06-04 15:54 ?409次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>)【ExtensionAbility<b class='flag-5'>組件</b>】

    鴻蒙開發(fā)Ability Kit程序框架服務(wù):任務(wù)管理

    AbilityRecord:系統(tǒng)服務(wù)側(cè)管理一個(gè)UIAbility實(shí)例的最小單元,對(duì)應(yīng)一個(gè)應(yīng)用側(cè)的UIAbility組件實(shí)例。系統(tǒng)服務(wù)側(cè)管理
    的頭像 發(fā)表于 06-24 14:46 ?337次閱讀
    <b class='flag-5'>鴻蒙</b>開發(fā)<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>:任務(wù)管理

    鴻蒙開發(fā)Ability Kit程序框架服務(wù):FA模型啟動(dòng)Stage模型UIAbility

    本文介紹FA模型的三種應(yīng)用組件如何啟動(dòng)Stage模型的UIAbility組件。
    的頭像 發(fā)表于 06-25 16:00 ?294次閱讀
    <b class='flag-5'>鴻蒙</b>開發(fā)<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務(wù)</b>:FA模型啟動(dòng)Stage模型<b class='flag-5'>UIAbility</b>