使用WindowStage.loadContent进行切换会对窗口进行销毁,应该是销毁新建的时候造成了闪屏。可以使用创建子窗口的方式实现需求,可参考以下demo思路:import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { display, window } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; import { calendarManager } from '@kit.CalendarKit'; import common from '@ohos.app.ability.common'; import { JSON } from '@kit.ArkTS'; let windowStage_: window.WindowStage | null = null; let sub_windowClass: window.Window | null = null; export let calendarMgr: calendarManager.CalendarManager; export let mContext: common.UIAbilityContext; export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); } onDestroy(): void { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); } showSubWindow() { // 1.创建应用子窗口。 if (windowStage_ == null) { console.error('Failed to create the subwindow. Cause: windowStage_ is null'); } else { windowStage_.createSubWindow("mySubWindow", (err: BusinessError, data) => { let errCode: number = err.code; if (errCode) { console.error('Failed to create the subwindow. Cause: ' + JSON.stringify(err)); return; } sub_windowClass = data; console.info('Succeeded in creating the subwindow. Data: ' + JSON.stringify(data)); let displayClass: display.Display = display.getDefaultDisplaySync();//获取屏幕大小 sub_windowClass.resize(displayClass.width, displayClass.height, (err: BusinessError) => { let errCode: number = err.code; if (errCode) { console.error('Failed to change the window size. Cause:' + JSON.stringify(err)); return; } console.info('Succeeded in changing the window size.'); }); // 3.为子窗口加载对应的目标页面。 sub_windowClass.setUIContent("components/media/Video", (err: BusinessError) => { let errCode: number = err.code; if (errCode) { console.error('Failed to load the content. Cause:' + JSON.stringify(err)); return; } console.info('Succeeded in loading the content.'); // 3.显示子窗口。 (sub_windowClass as window.Window).showWindow((err: BusinessError) => { let errCode: number = err.code; if (errCode) { console.error('Failed to show the window. Cause: ' + JSON.stringify(err)); return; } console.info('Succeeded in showing the window.'); }); }); }) } } destroySubWindow() { // 4.销毁子窗口。当不再需要子窗口时,可根据具体实现逻辑,使用destroy对其进行销毁。 (sub_windowClass as window.Window).destroyWindow((err: BusinessError) => { let errCode: number = err.code; if (errCode) { console.error('Failed to destroy the window. Cause: ' + JSON.stringify(err)); return; } console.info('Succeeded in destroying the window.'); }); } onWindowStageCreate(windowStage: window.WindowStage): void { // Main window is created, set main page for this ability hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); windowStage.loadContent('pages/Index', (err, data) => { if (err.code) { hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); return; } AppStorage.setOrCreate('windowStage',windowStage) windowStage_ = windowStage this.showSubWindow(); }); } onWindowStageDestroy(): void { // Main window is destroyed, release UI related resources hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); } onForeground(): void { // Ability has brought to foreground hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); } onBackground(): void { // Ability has back to background hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); } }在子窗口文件中使用window.findWindow("mySubWindow").destroyWindow()销毁子窗口显示首页。
使用WindowStage.loadContent进行切换会对窗口进行销毁,应该是销毁新建的时候造成了闪屏。可以使用创建子窗口的方式实现需求,可参考以下demo思路:
在子窗口文件中使用window.findWindow("mySubWindow").destroyWindow()销毁子窗口显示首页。