UIAbility組件與UI的數(shù)據(jù)同步
基于當(dāng)前的應(yīng)用模型,可以通過(guò)以下幾種方式來(lái)實(shí)現(xiàn)UIAbility組件與UI之間的數(shù)據(jù)同步。
- [使用EventHub進(jìn)行數(shù)據(jù)通信]:在基類(lèi)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ù)同步。
- 開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(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ù)通信能力。
在[基類(lèi)Context]中,提供了EventHub對(duì)象,可用于在UIAbility組件實(shí)例內(nèi)通信。使用EventHub實(shí)現(xiàn)UIAbility與UI之間的數(shù)據(jù)通信需要先獲取EventHub對(duì)象,本章節(jié)將以此為例進(jìn)行說(shuō)明。
- 在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; } } - 在UI中通過(guò)[eventHub.emit()]方法觸發(fā)該事件,在觸發(fā)事件的同時(shí),根據(jù)需要傳入?yún)?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'); // 開(kāi)發(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') }); }) } // ... } // ... } // ... } } - 在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"] - 在自定義事件“event1”使用完成后,可以根據(jù)需要調(diào)用[eventHub.off()]方法取消該事件的訂閱。
// context為UIAbility實(shí)例的AbilityContext this.context.eventHub.off('event1'); `HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

使用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)用性能和用戶(hù)體驗(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ò)這兩種方案,開(kāi)發(fā)者可以更加靈活地控制應(yīng)用狀態(tài),提高應(yīng)用的可維護(hù)性和可擴(kuò)展性。詳細(xì)請(qǐng)參見(jiàn)[應(yīng)用級(jí)變量的狀態(tài)管理]。
審核編輯 黃宇
-
框架
+關(guān)注
關(guān)注
0文章
404瀏覽量
18429 -
數(shù)據(jù)同步
+關(guān)注
關(guān)注
0文章
17瀏覽量
8371 -
鴻蒙
+關(guān)注
關(guān)注
60文章
2963瀏覽量
45919
發(fā)布評(píng)論請(qǐng)先 登錄
鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件生命周期】
鴻蒙Ability Kit(程序框架服務(wù))【UIExtensionAbility】
鴻蒙開(kāi)發(fā)-應(yīng)用程序框架UIAbility的使用
UIAbility組件與UI的數(shù)據(jù)同步介紹
HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-Stage模型UIAbility組件使用(一)
鴻蒙應(yīng)用模型:【Ability Kit】簡(jiǎn)介
鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件生命周期】實(shí)例
鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件啟動(dòng)模式】
鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件基本用法】
鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件間交互(設(shè)備內(nèi))】
鴻蒙Ability Kit(程序框架服務(wù))【UIAbility內(nèi)和UIAbility間頁(yè)面的跳轉(zhuǎn)】
鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):任務(wù)管理
鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):FA模型啟動(dòng)Stage模型UIAbility
【HarmonyOS 5】鴻蒙中的UIAbility詳解(二)
鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件與UI的數(shù)據(jù)同步】
評(píng)論