WindowStage创建完成后会触发onWindowStageCreate()回调,可以在该回调中设置UI界面加载和订阅WindowStage的事件。 : Window.WindowStage) { // 设置WindowStage的事件订阅(获焦/失焦、可见/不可见) // 设置UI界面加载 windowStage.loadContent WindowStage的创建和销毁在UIAbility实例创建完成后,在进入Foreground状态之前,系统会创建一个WindowStage。 : Window.WindowStage) { // 设置WindowStage的事件订阅(获焦/失焦、可见/不可见) // 设置UI界面加载 windowStage.loadContent : Window.WindowStage) { // 设置WindowStage的事件订阅(获焦/失焦、可见/不可见) // 设置UI界面加载 windowStage.loadContent
: Map<string, window.WindowStage> = new Map<string, window.WindowStage>(); /** * 登记 * @param >, WindowStage: Map<string, window.WindowStage>) { UIAbilityContext.forEach((value: Context, key ((value: window.WindowStage, key: string, map: Map<string, window.WindowStage>) => { StageModel.WindowStage.set const windowStage = StageModel.WindowStage.get(this.windowStageName) if (windowStage) { this.windowStage = windowStage } else { throw new Error(`[异常][未获取到windowStage,请检查StageModel
WindowStage创建完成后会进入onWindowStageCreate()回调,可以在该回调中设置UI加载,设置WindowStage的事件订阅。 onWindowStageCreate') // 缓存应用状态: windowStage AppStorage.setOrCreate('windowStage', windowStage) / ') windowStage: window.WindowStage | null = AppStorage.get('windowStage') || null // ...}场景三:页面初始化场景描述以及生命周期钩子选择场景 ') windowStage: window.WindowStage | null = AppStorage.get('windowStage') || null subWindowClass: window.Window ') windowStage: window.WindowStage | null = AppStorage.get('windowStage') || null; subWindowClass: window.Window
: WindowStage): Unit { Hilog.info(1, "Cangjie", "MainAbility onWindowStageCreate.") _windowStage = Some(windowStage) windowStage.loadContent("EntryView") } } public class Global { public static var _abilityContext: Option<UIAbilityContext> = None public static var _windowStage : Option<WindowStage> = None public static prop abilityContext: UIAbilityContext { get() : WindowStage { get() { match (_windowStage) { case Some(stage) =
核心代码在Ability中获取windowStage实例。 onWindowStageCreate(windowStage: window.WindowStage): void { // Main window is created, set main page for this ability windowStage.loadContent('pages/Index', (err) => { // 这里需要注意为了确保windowStage实例获取成功, 我们最好在loadContent回调中回去,能保证页面加载成功的时候一定能讲windowStage实例存到AppStorage对象中 AppStorage.setOrCreate("windowStage ("windowStage") as window.WindowStage;} build() { ...
: window.WindowStage): void { windowStage.loadContent('pages/Index', this.storage, (err) => { : ${JSON.stringify(windowStage)}`); }, // 当窗口处于活动状态时被调用 onWindowStageActive(uiAbility, windowStage: window.WindowStage) { hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageActive uiAbility.launchWant , windowStage: window.WindowStage) { hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageInactive uiAbility.launchWant : ${JSON.stringify(windowStage)}`); }, // 当窗口被销毁时被调用 onWindowStageDestroy(uiAbility, windowStage
WindowStage是应用窗口的抽象表示,它包含了窗口的渲染、事件处理等功能。当WindowStage创建完成后,系统会调用onWindowStageCreate()回调方法。 创建时触发 onWindowStageCreate(windowStage: window.WindowStage): void { // 获取应用上下文 const windowStage: window.WindowStage): void { // 在这里可以执行页面激活时的操作,如恢复状态、刷新数据等 // ... } // 当WindowStage失焦时触发 onWindowStageInactive(ability: UIAbility, windowStage: window.WindowStage): void (ability: UIAbility, windowStage: window.WindowStage): void { // 在这里可以执行WindowStage销毁前的清理操作
通过WindowStage的loadContent()方法指定页面路径。 export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage : window.WindowStage) { windowStage.loadContent('pages/Main', () => {}); // 设置启动页面 } onCreate(want onWindowStageCreate(windowStage: window.WindowStage) { windowStage.loadContent('pages/Index'); / 释放通过WindowStage获取的资源,注销事件订阅(off('windowStageEvent'))。4、WindowStageDestroyWindowStage销毁时触发(UI资源释放)。
当 HarmonyOS 应用启动时,系统首先会创建一个 EntryAbility 实例,实例创建完成之后,在进入 Foreground 之前,系统会创建一个 WindowStage 实例,每一个 Ability 实例,都对应一个 WindowStage 实例。 WindowStage 为本地窗口管理器,用于管理窗口相关的内容,例如与界面相关的获焦/失焦、可见/不可见。Ability 的生命周期和 WindowStage 回调对应的关系,如下图所示。 左图表示 UIAbility 的生命周期,每个生命周期分别做什么事,我会在下篇文章中分析,而右图表示 WindowStage 回调。 onWindowStageCreate(windowStage: window.WindowStage): void { windowStage.loadContent('pages/Index
// 创建子窗口 private createSubWindow(windowStage: window.WindowStage | null) { try { if (! windowStage) { return; } windowStage.createSubWindow('mySubWindow', (err: BusinessError // 为当前WindowStage加载命名路由页面 private loadContent(path: string) { if (this.subWindow) { // TODO:
它主要包含UIAbility组件和ExtensionAbility组件、WindowStage、Context和AbilityStage。 WindowStage: WindowStage是应用界面的顶层容器,它负责管理应用界面的显示和布局。 WindowStage可以包含一个或多个UIAbility组件,并负责协调它们之间的界面切换和交互。 在WindowStage中的每个UIAbility组件都对应一个Context对象,用于提供界面相关的上下文信息。 AbilityStage可以包含一个或多个WindowStage,用于管理多个应用界面的生命周期和切换。
1.2.3 效果展示1.3 LocalStorage多个页面共享UIAbility的使用方法1.3.1 多个页面的使用方法依旧是准备共享数据,放置在设置当前应用的加载页面(UIAbility共享),只要是当前windowstage windowStage.loadContent('pages/10/TestLocalStorage03',storage);接收数据const storage = LocalStorage.getShared ()//其他步骤同单个页面传输吗,这里就不再叙述完整代码展示UIAbility内代码 onWindowStageCreate(windowStage: window.WindowStage): void { 'uname':'公孙离', 'age':'18', } const storage = new LocalStorage(data) // //只要是当前windowStage 内的界面,都可以共享这份数据 windowStage.loadContent('pages/10/TestLocalStorage03',storage); }页面1// const data:
let windowStage = AppUtil.getWindowStage(); LogUtil.error(JSON.stringify(windowStage, null, 2));getMainWindow : ${windowStage}`); }, onWindowStageActive(ability, windowStage) { LogUtil.info(`AbilityLifecycleCallback : ${windowStage}`); }, onWindowStageInactive(ability, windowStage) { LogUtil.info(`AbilityLifecycleCallback : ${windowStage}`); }, onWindowStageDestroy(ability, windowStage) { LogUtil.info(`AbilityLifecycleCallback : ${windowStage}`); }, onAbilityDestroy(ability) { LogUtil.info(`AbilityLifecycleCallback
window from '@ohos.window'; export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage : window.WindowStage) { windowStage.loadContent('pages/Index'); let window = windowStage.getMainWindow
核心代码在EntryAbility中获取WindowStage。 onWindowStageCreate(windowStage: window.WindowStage): void { // Main window is created, set main page ''); return; } // 保存窗口管理器 AppStorage.setOrCreate("windowStage", windowStage); hilog.info(0x0000, 'testTag 核心代码通过windowStage获取主窗口的Router,实现主窗口的Router跳转。. A:只要能获取到windowStage就能创建并使用子窗口。
WindowStageCreate:UIAbility创建完成之后,在进入Foreground之前,系统会创建一个WindowStage,WindowStage创建完成后会进入onWindowStageCreate 回调,我们可以在该回调中设置UI页面加载,设置WindowStage订阅事件,在onWindowStageCreate回调中通过loaclContent()方法设置应用要加载的页面,并根据需要订阅WindowStage UIAbility实例销毁之前,会先进入到onWindowStageDestroy()回调,我们可以在这个回调中释放UI界面的资源,例如在onWindowStageDestroy()中注销获焦|失焦等WindowStage
aboutToAppear(): void { // 初始化窗口管理model const windowStage: window.WindowStage | undefined = AppStorage.get('windowStage'); // 没有windowStage将无法执行下列逻辑 if (! windowStage) { logger.error(TAG, 'windowStage init error!') ; return; } this.windowModel.setWindowStage(windowStage); // 设置沉浸模式及状态栏白色
, set main page for this ability // 使用 windowStage.loadContent设置要加载的页面,并根据需要订阅WindowState的事件 // windowStage.loadContent('pages/Index', (err, data) => { windowStage.loadContent('pages/StudentListPage 在onWindowStageCreate(windowStage)中通过loadContent接口设置应用要加载的页面。 onWindowStageCreate(windowStage: window.WindowStage) { // 设置UI页面加载 // 设置WindowStage的事件订阅 windowStage.loadContent('pages/Index', (err, data) => { windowStage.loadContent('pages/StudentListPage
window } from '@kit.ArkUI';export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage : window.WindowStage): void { // 挂载globalThis上,可以当全局对象使用。 当然此处实现方式因人而异,你可以放在单例里,或者localstore中等等 globalThis.windowClass = windowStage.getMainWindowSync(); windowStage.loadContent('pages/RotationTestPage', (err) => { if (err.code) { return;
首先,来到应用的main_ability.cj文件的onWindowStageCreate方法下,设置全屏模式我们要先获取到主窗口,然后设置全屏,实现代码如下:windowStage.getMainWindow 还是在刚才的方法中,获取顶部避让区域的方法如下:let topArea = windowStage.getMainWindow().getWindowAvoidArea(AvoidAreaType.TYPE_SYSTEM topAreaHeight = topArea.topRect.heighttopAreaHeight就是顶部避让区域的高度尺寸,底部避让区域的获取方式稍有不同,需要单独获取:let bottomArea = windowStage.getMainWindow 另外,有些情况下大家可能会需要用到屏幕的尺寸,获取屏幕尺寸的方法如下:let windowRect = windowStage.getMainWindow().getWindowProperties(