HarmonyOS鸿蒙Next中如何感知@Component页面的show和hide?

HarmonyOS鸿蒙Next中如何感知@Component页面的show和hide?

有没有什么办法能感知@Component页面的展示和隐藏?没有被@Entry修饰的@Component组件,也没用使用NavDestination

比如setInterval定时器,在页面隐藏的时候想clearInterval,感觉很少有情况会进入aboutToDisappear这个生命周期中,虽然setInterval机制在页面不活跃的时候就会自动不再执行,但是还是想知道有什么办法能感知@Component页面的展示和隐藏?

是不是只有这个@Entry页面移除了页面栈时才会进入aboutToDisappear中,比如在B页面执行router.back回到A页面,就会执行B页面的aboutToDisappear,并销毁B页面。


更多关于HarmonyOS鸿蒙Next中如何感知@Component页面的show和hide?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

这个需要分情况讨论的:

如果是被 @Entry 修饰的 @Component 则可以通过下面两个方法来判断是否执行显示跟隐藏。但是某些情况下 onPageHide() 可能不会执行,就是直接杀进程的时候,或者崩溃。

onPageShow(): void {
}

onPageHide(): void {
}

如果没有被 @Entry 修饰的 @Component 组件,看你最外层使用 NavDestination 控件修饰的时候,可以通过它的两个属性:来判断显示跟隐藏。

.onHidden(() => {

})

.onShown(() => {

})

更多关于HarmonyOS鸿蒙Next中如何感知@Component页面的show和hide?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


组件信息

名称

类型

@Component

是否为入口组件

是否为导航目标

描述

就是没有被@Entry修饰的@Component组件,也没用使用NavDestination。

通过父组件,发消息,父组件肯定有的,通知就好了。

在HarmonyOS Next中,使用@Component的页面可以通过aboutToAppearaboutToDisappear生命周期回调感知显示和隐藏状态。aboutToAppear在页面显示时触发,aboutToDisappear在页面隐藏时触发。这两个回调属于ArkTS组件生命周期,适用于声明式开发范式。示例代码:

@Component
struct MyPage {
  aboutToAppear() {
    // 页面显示时执行
  }

  aboutToDisappear() {
    // 页面隐藏时执行
  }
}

在HarmonyOS Next中,对于未被@Entry修饰的@Component组件,可以通过以下方式感知页面展示和隐藏:

  1. 对于自定义组件,可以使用生命周期回调:
  • aboutToAppear:组件即将出现时触发
  • aboutToDisappear:组件即将消失时触发
  1. 对于定时器管理,建议:
  • 在aboutToAppear中初始化定时器
  • 在aboutToDisappear中清除定时器
  • 即使页面未被销毁,当组件不可见时也会触发aboutToDisappear
  1. 关于页面栈的理解是正确的:
  • 只有使用@Entry的页面才会被压入页面栈
  • 当执行router.back()时,确实会触发前一页面的aboutToDisappear
  • 对于非@Entry组件,其生命周期与所属页面保持一致

这种设计确保了资源的高效管理,即使组件未被销毁,当不可见时也能及时释放资源。

回到顶部