HarmonyOS 鸿蒙Next App后台切前台,为什么先走了当前页面的onPageShow,再执行了onForeGround

发布于 1周前 作者 eggper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next App后台切前台,为什么先走了当前页面的onPageShow,再执行了onForeGround

在EntryAbility的onForeGround中,添加了发射事件
this.context.eventHub.emit('onForeground');

在某个页面A的aboutToApear中注册了监听

aboutToAppear(): void {
    getContext().eventHub.on('onForeground', () => {
        console.log('APP onforeground');
    });
}

在A页面的onPageshow中打印了日志

onPageShow(): void {
    console.log('A onpageshow');
}

在进入A页面后,切后台再切前台,控制台先打印了’A onpageshow’ 然后打印了’APP onforeground’。

我的期望是能识别出A页面的onPageShow 是进入该页面或者返回该页面执行的,还是后台切前台执行的从而走不同的业务逻辑,如

onPageShow(): void {
    if (后台切前台) {
        执行业务逻辑1
    } else {
        执行业务逻辑2
    }
}

更多关于HarmonyOS 鸿蒙Next App后台切前台,为什么先走了当前页面的onPageShow,再执行了onForeGround的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next App后台切前台,为什么先走了当前页面的onPageShow,再执行了onForeGround的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


  1. 自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。

  2. onPageShow()在页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件生效。

  3. 目前只有onForeground()回调和onBackground()回调可以感知前后台,可以通过在onForeground()和onBackground()中设置参数传递给@Entry页面,当onPageShow回调执行时通过参数判断来确定是否是前后台显示 可以使用AppStorage作为参数传递。

  4. Foreground和Background状态分别在UIAbility实例切换至前台和切换至后台时触发,对应于onForeground()回调和onBackground()回调。

  5. onForeground()回调,在UIAbility的UI可见之前,如UIAbility切换至前台时触发。可以在onForeground()回调中申请系统需要的资源,或者重新申请在onBackground()中释放的资源。

  6. onBackground()回调,在UIAbility的UI完全不可见之后,如UIAbility切换至后台时候触发。可以在onBackground()回调中释放UI不可见时无用的资源,或者在此回调中执行较为耗时的操作,例如状态保存等。

  7. onPageShow和onForeground是两个独立的生命周期方法,它们分别处理页面切换到前台和从后台切回前台的场景。因此,当应用从后台切到前台时,onPageShow会首先被调用,然后是onForeground。

回到顶部