定时器、订阅未在onDestroy中清除,导致内存泄漏 - HarmonyOS 鸿蒙Next

定时器、订阅未在onDestroy中清除,导致内存泄漏 - HarmonyOS 鸿蒙Next 在页面中使用 setIntervalEmitter 订阅事件后,即使页面销毁(onDestroy),定时器仍持续运行或订阅未取消,导致内存泄漏。

3 回复

当不需要Emitter订阅某个事件时,需要及时取消订阅避免造成内存泄漏。setInterval事件也需要主动销毁。

更多关于定时器、订阅未在onDestroy中清除,导致内存泄漏 - HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


setInterval 事件不主动销毁么~~

Emitter 订阅不可能出现导致内存泄漏,有的话贴出 log

在HarmonyOS鸿蒙Next中,定时器和订阅未在onDestroy生命周期方法中清除,会导致内存泄漏。定时器(如TimersetInterval)和订阅(如事件监听)如果在组件销毁时未正确清理,会继续持有对组件的引用,阻止垃圾回收机制回收内存。

具体原因如下:

  1. 定时器未清除:定时器任务在后台持续运行,即使组件已销毁,定时器仍会持有对组件的引用,导致内存无法释放。
  2. 订阅未取消:订阅的事件监听器在组件销毁后仍会触发,持有对组件的引用,造成内存泄漏。

解决方案是在onDestroy方法中显式清除定时器和取消订阅:

  1. 清除定时器:调用clearIntervalclearTimeout等方法,停止定时器任务。
  2. 取消订阅:调用事件监听的取消方法,移除事件监听器。

示例代码:

onDestroy() {
    if (this.timer) {
        clearInterval(this.timer);
    }
    if (this.subscription) {
        this.subscription.unsubscribe();
    }
}

通过上述操作,确保在组件销毁时释放相关资源,避免内存泄漏。

回到顶部