HarmonyOS鸿蒙Next中上滑进入任务栈 applicationStateChange不回调onApplicationBackground,只有回退到桌面才会有回调

HarmonyOS鸿蒙Next中上滑进入任务栈 applicationStateChange不回调onApplicationBackground,只有回退到桌面才会有回调

cke_2124.png
@Entry
@Component
export struct ApplicationStateChangeTest {
  applicationStateChangeCallback: ApplicationStateChangeCallback = {
    onApplicationForeground: (): void => {
      hilog.info(1, 'test123', 'onApplicationForeground')
    },
    onApplicationBackground: (): void => {
      hilog.info(1, 'test123', 'onApplicationBackground')
    }
  }

  aboutToAppear(): void {
    getContext().getApplicationContext().on('applicationStateChange', this.applicationStateChangeCallback)
  }

  build() {
    Stack()
      .width('100%')
      .height('100%')
  }
}

更多关于HarmonyOS鸿蒙Next中上滑进入任务栈 applicationStateChange不回调onApplicationBackground,只有回退到桌面才会有回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

【相关知识】

实现应用进入多任务页面时,页面模糊显示

【问题描述】

如何实现当应用进入多任务界面时,给组件内容添加模糊样式。

【背景知识】

实现应用进入多任务界面,页面模糊显示功能,需要以下能力实现:

[组件内容模糊] 可以为当前组件提供内容模糊能力。

[WindowStage(窗口管理器)] 管理各个基本窗口单元,即Window实例,可通过WindowStage获取当前应用所处状态。

【解决方案】

实现上述功能,需要通过windowStageEvent开启WindowStage生命周期变化的监听,从其返回值判断是否处于多任务界面,从而通过控制foregroundBlurStyle属性实现页面的模糊显示。可以参考以下代码:

import { common } from '@kit.AbilityKit';

@Entry
@Component
struct PageOne {
  @State message: string = 'Hello World';
  @State val: number = 0;

  aboutToAppear() {
    // 通过windowStageEvent监听窗口状态,当返回值为6时,表示处于前台不可交互状态,例如从屏幕底部上划,应用进入到多任务界面后的状态。
    (getContext() as common.UIAbilityContext).windowStage.on("windowStageEvent", (data) => {
      if (data == 6) {
        this.val = 100
      } else{
        this.val = 0
      }
    })
  }

  build() {
    Column() {
      Text(this.message)
        .id('PageOneHelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
    }
    // 通过控制foregroundBlurStyle的scale(内容模糊效果程度)属性,控制组件的模糊效果。
    .foregroundBlurStyle(BlurStyle.Thin,
      { colorMode: ThemeColorMode.LIGHT, adaptiveColor: AdaptiveColor.DEFAULT, scale: this.val })
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS鸿蒙Next中上滑进入任务栈 applicationStateChange不回调onApplicationBackground,只有回退到桌面才会有回调的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你好,ApplicationContext.on('applicationStateChange') 是注册对当前应用前后台变化的监听,如您想监听应用进入多任务页面,可通过 window.on('windowStageEvent') 来监听,当返回的 WindowStageEventType 为 6 时应用进入到多任务界面,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-window#windowstageeventtype9

参考代码:

aboutToAppear() {
  // 通过 windowStageEvent 监听窗口状态,当返回值为 6 时,表示处于前台不可交互状态,例如从屏幕底部上划,应用进入到多任务界面后的状态。
  (getContext() as common.UIAbilityContext).windowStage.on("windowStageEvent", (data) => {
    if (data == 6) {
      // ...
    } else{
      // ...
    }
  })
}

在HarmonyOS Next中,上滑进入任务栈时applicationStateChange不会触发onApplicationBackground回调,这是预期行为。系统设计为仅当应用完全退到后台(如回退桌面)时才触发该回调。任务栈视图属于临时多任务界面,应用仍保持前台状态。若需检测任务栈状态变化,可监听窗口焦点变化或使用AbilityLifecycleCallback。当前系统版本此行为属于正常机制。

这是HarmonyOS Next中应用状态管理的预期行为。上滑进入任务栈时应用仍处于前台运行状态,系统不会触发onApplicationBackground回调,因为应用只是进入了多任务视图而非真正退到后台。只有当应用完全退出到桌面时才会触发该回调。

这种设计符合HarmonyOS的应用生命周期管理机制:

  1. 任务栈视图中的应用仍保持运行状态
  2. 只有完全离开应用才会触发后台回调
  3. 从任务栈切回应用时会触发onApplicationForeground

如果需要检测进入任务栈的操作,建议监听窗口状态变化(windowStage.on('windowStageEvent'))来判断应用是否进入多任务视图。

回到顶部