Stage模型中,實現standard、singleton、specified多種模式場景。
本實例參考[開發指南][gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]。 本實例需要使用[aa工具] 查看應用Ability 模式信息。
效果預覽
使用說明
1、standard模式:
1)進入首頁,點擊番茄,會新建一個番茄的Ability,展示番茄的詳情;
2)在番茄的詳情界面,點擊黃瓜,會新建一個黃瓜的Ability,展示黃瓜的詳情;
3)使用aa工具查看Ability信息,此時存在以下Ability:1個番茄的Ability、1個黃瓜的Ability、1個首頁的Ability;
2、singleton模式:
1)進入首頁,點擊冰淇凌,會新建一個冰淇凌的Ability,展示冰淇凌的詳情;
2)在冰淇凌的詳情界面,點擊螃蟹,會復用冰淇凌的Ability,頁面數據會刷新并展示螃蟹的詳情;
3)使用aa工具查看Ability信息,此時存在以下Ability:1個冰淇凌的Ability、1個首頁Ability;
3、specified模式:
1)進入首頁,點擊核桃,會新建一個核桃的Ability,展示核桃的詳情;
2)在核桃的詳情界面,點擊藍莓,會新建一個藍莓的Ability,展示藍莓的詳情;
3)在藍莓的詳情界面,點擊核桃,會復用已存在的核桃的Ability,實現specified模式下的單實例特性,頁面數據會刷新并展示核桃的詳情;
4)使用aa工具查看Ability信息,此時存在以下Ability:1個核桃的Ability、1個藍莓的Ability、1個首頁Ability;
具體實現
- 本示例啟動standard、singleton、specified三種模式的方法主要封裝在Util當中,源碼參考:[Util.ts]。
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Logger from './Logger'
const TAG = '[Sample_StartMode]'
let contextCaller, want
interface EventHub {
emit(event: string, ...args: Object[]): void
}
interface AbilityContext {
eventHub: EventHub
}
export function getContextData(): any {
Logger.info(TAG, 'UtilPage getContextData start')
let context = getContext(this) as AbilityContext
let data = {
context: null,
launchWant: null
}
context.eventHub.emit("getAbilityData", data)
contextCaller = data.context // 拿到全局的context,即類似globalThis.mainAbilityContext
want = data.launchWant
Logger.info(TAG, 'UtilPage contextCaller ' + JSON.stringify(contextCaller))
return { 'want': want }
}
export function startMode(wantParameters: any, abilityName: string) {
Logger.info(TAG, `${abilityName} start`)
getContextData()
let want = {
bundleName: 'ohos.samples.startmode',
abilityName: abilityName,
parameters: wantParameters
}
Logger.info(TAG, `${abilityName} contextCaller ${JSON.stringify(contextCaller)}`)
contextCaller.startAbility(want).catch(err = > {
Logger.info(TAG, 'err is' + JSON.stringify(err))
})
Logger.info(TAG, `${abilityName} end`)
}
export function totast() {
AlertDialog.show(
{
message: $r('app.string.totast'),
secondaryButton: {
value: 'ok',
action: () = > {
Logger.info(TAG, 'Callback when the second button is clicked')
}
}
}
)
}
- 新建Ability:創建三個代表standard、singleton、specified模式的Ability,如工程目錄中的SingletonAbility、SpecifiedAbility、StandardAbility,并在module.json文件中將launchType屬性修改為對應的啟動模式屬性。
- 啟動指定Ability:通過Util中的startMode函數根據頁面所傳的abilityName,啟動對應的ability并進入詳情頁面。
- specified多實例功能實現:specified模式則是根據MyAbilityStage中的onAcceptWant函數給用戶返回一個ability標識,如果之前啟動過標識的ability,不創建新的實例并拉回棧頂,否則創建新的實例并啟動。
審核編輯 黃宇
-
鴻蒙
+關注
關注
59文章
2503瀏覽量
43762 -
OpenHarmony
+關注
關注
26文章
3820瀏覽量
18114
發布評論請先 登錄
DialogHub上線OpenHarmony開源社區,高效開發鴻蒙應用彈窗
鴻蒙北向開發OpenHarmony5.0 DevEco Studio開發工具安裝與配置

【北京迅為】itop-3568 開發板openharmony鴻蒙燒寫及測試-第1章 體驗OpenHarmony—燒寫鏡像

鴻蒙原生頁面高性能解決方案上線OpenHarmony社區 助力打造高性能原生應用
OpenHarmony源碼編譯后燒錄鏡像教程,RK3566鴻蒙開發板演示

OpenHarmony怎么修改DPI密度值?觸覺智能RK3566鴻蒙開發板演示

OpenHarmony屬性信息怎么修改?觸覺智能RK3566鴻蒙開發板來演示

如何在開源鴻蒙OpenHarmony開啟SELinux模式?RK3566鴻蒙開發板演示

瑞芯微RK3566鴻蒙開發板OpenHarmony標準系統應用兼容性測試指導

鴻蒙OpenHarmony南向/北向快速開發教程-迅為RK3568開發板
鴻蒙開發:啟動本地PageAbility

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

評論