1、 HarmoryOS Ability頁面的生命周期
2、 @Component自定義組件
3、HarmonyOS 應用開發(fā)學習筆記 ets組件生命周期
4、HarmonyOS 應用開發(fā)學習筆記 ets組件樣式定義 @Styles裝飾器:定義組件重用樣式 @Extend裝飾器:定義擴展組件樣式
5、HarmonyOS 應用開發(fā)學習筆記 state狀態(tài)管理概述
6、HarmonyOS應用開發(fā)學習筆記 包名、icon圖標,應用名修改 UIAbility組件介紹、UIAbility啟動模式、UIAbility組件基本用法
基于HarmonyOS的應用模型,可以通過以下兩種方式來實現(xiàn)UIAbility組件與UI之間的數(shù)據(jù)同步。
項目 | 描述 |
---|---|
EventHub | 基于發(fā)布訂閱模式來實現(xiàn),事件需要先訂閱后發(fā)布,訂閱者收到消息后進行處理。 |
globalThis | ArkTS引擎實例內(nèi)部的一個全局對象,在ArkTS引擎實例內(nèi)部都能訪問。 |
一、使用EventHub進行數(shù)據(jù)通信
EventHub和android EventBus很類似,三部曲:
1、EventHub 聲明訂閱
EventHub.on()
參數(shù)名 | 類型 | 必填 | 說明 |
---|---|---|---|
event | string | 是 | 事件名稱。 |
callback | Function | 是 | 事件回調(diào),事件觸發(fā)后運行。 |
this.context.eventHub.on('123', this.func1);
this.context.eventHub.on('123', () => {
console.log('call anonymous func 1');
});
2、EventHub 發(fā)送消息,訂閱回調(diào)
EventHub.emit()
參數(shù)名 | 類型 | 必填 | 說明 |
---|---|---|---|
event | string | 是 | 事件名稱。 |
…args | Object[] | 是 | 可變參數(shù),事件觸發(fā)時,傳遞給回調(diào)函數(shù)的參數(shù)。 |
this.context.eventHub.emit('123');
this.context.eventHub.emit('123', 1);
this.context.eventHub.emit('123', 1, 2);
3、EventHub 取消訂閱
EventHub.off()
參數(shù)名 | 類型 | 必填 | 說明 |
---|---|---|---|
event | string | 是 | 事件名稱。 |
callback | Function | 否 | 事件回調(diào)。如果不傳callback,則取消訂閱該事件下所有callback。 |
this.context.eventHub.on('123', this.func2);//取消指定方法的訂閱
this.context.eventHub.off('123'); //取消訂閱"123"
4、示例
- 訂閱
import UIAbility from '@ohos.app.ability.UIAbility';
const TAG: string = '[Example].[Entry].[EntryAbility]';
export default class EntryAbility extends UIAbility {
func1(...data) {
// 觸發(fā)事件,完成相應的業(yè)務操作
console.info(TAG, '1. ' + JSON.stringify(data));
}
onCreate(want, launch) {
// 獲取eventHub
let eventhub = this.context.eventHub;
// 執(zhí)行訂閱操作
eventhub.on('event1', this.func1);
eventhub.on('event1', (...data) => {
// 觸發(fā)事件,完成相應的業(yè)務操作
console.info(TAG, '2. ' + JSON.stringify(data));
});
}
}
- 發(fā)送消息
import common from '@ohos.app.ability.common';
@Entry
@Component
struct Index {
private context = getContext(this) as common.UIAbilityContext;
eventHubFunc() {
// 不帶參數(shù)觸發(fā)自定義“event1”事件
this.context.eventHub.emit('event1');
// 帶1個參數(shù)觸發(fā)自定義“event1”事件
this.context.eventHub.emit('event1', 1);
// 帶2個參數(shù)觸發(fā)自定義“event1”事件
this.context.eventHub.emit('event1', 2, 'test');
// 開發(fā)者可以根據(jù)實際的業(yè)務場景設計事件傳遞的參數(shù)
}
// 頁面展示
build() {
// ...
}
}
- 取消訂閱
// context為UIAbility實例的AbilityContext
this.context.eventHub.off('event1');
二、使用globalThis進行數(shù)據(jù)同步
globalThis是ArkTS引擎實例內(nèi)部的一個全局對象,引擎內(nèi)部的UIAbility/ExtensionAbility/Page都可以使用,因此可以使用globalThis全局對象進行數(shù)據(jù)同步。
使用globalThis進行數(shù)據(jù)同步
1、使用
//數(shù)據(jù)存入globalThis中
globalThis.xxx= aa;
//需要使用的地方調(diào)用
let a=globalThis.xxx
AbilityA中保存數(shù)據(jù)一個字符串數(shù)據(jù)并掛載到globalThis上。
import UIAbility from '@ohos.app.ability.UIAbility'
export default class AbilityA extends UIAbility {
onCreate(want, launch) {
globalThis.entryAbilityStr = 'AbilityA'; // AbilityA存放字符串“AbilityA”到globalThis
// ...
}
}
AbilityB中獲取對應的數(shù)據(jù)
import UIAbility from '@ohos.app.ability.UIAbility'
export default class AbilityB extends UIAbility {
onCreate(want, launch) {
// AbilityB從globalThis讀取name并輸出
console.info('name from entryAbilityStr: ' + globalThis.entryAbilityStr);
// ...
}
}
組件之間也是如此文章來源:http://www.zghlxwxcb.cn/news/detail-778115.html
2、globalThis使用的注意事項
文章來源地址http://www.zghlxwxcb.cn/news/detail-778115.html
1) 存放名稱不要相同
- Stage模型下進程內(nèi)的UIAbility組件共享ArkTS引擎實例,使用globalThis時需要避免存放相同名稱的對象。例如AbilityA和AbilityB可以使用globalThis共享數(shù)據(jù),在存放相同名稱的對象時,先存放的對象會被后存放的對象覆蓋。
2)用完將其賦值為null,以減少對應用內(nèi)存的占用。
- 對于綁定在globalThis上的對象,其生命周期與ArkTS虛擬機實例相同,建議在使用完成之后將其賦值為null,以減少對應用內(nèi)存的占用。
到了這里,關于HarmonyOS應用開發(fā)學習筆記 UIAbility組件與UI的數(shù)據(jù)同步 EventHub、globalThis的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!