HarmonyOS鸿蒙Next中视频类应用横竖屏切换,在aboutToAppear()中取消监听,导致无法正确移除监听

HarmonyOS鸿蒙Next中视频类应用横竖屏切换,在aboutToAppear()中取消监听,导致无法正确移除监听 【问题描述】视频类应用横竖屏切换-影音娱乐-行业场景解决方案 - 华为HarmonyOS开发者监听窗口变化示例代码在**aboutToAppear()中调用off取消监听(文字描述是在aboutToDisappear()**中取消监听),取消监听应该在aboutToDisappear()生命周期中执行,而不是aboutToAppear(),否则组件销毁时监听不会被移除,导致内存泄漏。

cke_332.png

代码仓也是在aboutToAppear()中取消监听。

cke_1222.png

【优化建议】将取消监听的方法名修改为aboutToDisappear(),正确取消监听。


更多关于HarmonyOS鸿蒙Next中视频类应用横竖屏切换,在aboutToAppear()中取消监听,导致无法正确移除监听的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

尊敬的开发者,您好,文档已更新,请查看最新的文档链接:监听窗口变化

更多关于HarmonyOS鸿蒙Next中视频类应用横竖屏切换,在aboutToAppear()中取消监听,导致无法正确移除监听的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


尊敬的开发者,您好,感谢您的反馈,问题正在加速处理中,还请关注后续版本,感谢您的理解与支持。

这个反馈是合理的。监听窗口变化这类注册/反注册逻辑,通常应该在组件进入时注册、退出时反注册;如果示例在 aboutToAppear() 中调用 off,相当于组件刚出现就尝试取消监听,真正销毁时反而没有释放逻辑,容易造成监听残留。

建议文档和代码仓保持一致改为:aboutToAppear() 中 on 注册窗口尺寸/方向变化监听,aboutToDisappear() 中 off 取消同一个监听回调。这里还要注意回调函数最好保存为成员变量或稳定引用,off 时传入与 on 时相同的 callback;如果每次传匿名函数,也可能出现取消不掉的情况。

因此这个点不只是命名笔误,确实会影响示例的资源释放语义,建议同步修正文档文字、示例代码和代码仓。

在HarmonyOS鸿蒙Next中,aboutToAppear()的调用时机早于组件首次显示,此时若取消横竖屏监听,但监听可能尚未通过onConfigurationUpdated等API注册完成,导致移除操作无效。正确做法应确保监听在注册后的同生命周期阶段或后续合适时机移除,而非在未注册时提前取消。

该问题源于生命周期使用错误:在 aboutToAppear() 中调用 off 取消监听,此时组件尚未完成挂载,本就不存在已注册的监听,导致“取消”操作无效,而组件销毁时未正确移除监听,最终引发内存泄漏。正确做法是在 aboutToDisappear() 中调用 off,与 aboutToAppear() 中的 on 注册成对出现,确保退出时清理。

示例修正代码片段:

aboutToAppear() {
  window.on('sizeChange', this.onSizeChange);
}

aboutToDisappear() {
  window.off('sizeChange', this.onSizeChange);
}

文档中的代码示例存在笔误,应以 aboutToDisappear 为准。

回到顶部