定时器、订阅未在onDestroy中清除,导致内存泄漏 - HarmonyOS 鸿蒙Next
定时器、订阅未在onDestroy中清除,导致内存泄漏 - HarmonyOS 鸿蒙Next
在页面中使用 setInterval
或 Emitter
订阅事件后,即使页面销毁(onDestroy
),定时器仍持续运行或订阅未取消,导致内存泄漏。
3 回复
当不需要Emitter
订阅某个事件时,需要及时取消订阅避免造成内存泄漏。setInterval
事件也需要主动销毁。
更多关于定时器、订阅未在onDestroy中清除,导致内存泄漏 - HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你setInterval
事件不主动销毁么~~
Emitter
订阅不可能出现导致内存泄漏,有的话贴出 log
在HarmonyOS鸿蒙Next中,定时器和订阅未在onDestroy
生命周期方法中清除,会导致内存泄漏。定时器(如Timer
或setInterval
)和订阅(如事件监听)如果在组件销毁时未正确清理,会继续持有对组件的引用,阻止垃圾回收机制回收内存。
具体原因如下:
- 定时器未清除:定时器任务在后台持续运行,即使组件已销毁,定时器仍会持有对组件的引用,导致内存无法释放。
- 订阅未取消:订阅的事件监听器在组件销毁后仍会触发,持有对组件的引用,造成内存泄漏。
解决方案是在onDestroy
方法中显式清除定时器和取消订阅:
- 清除定时器:调用
clearInterval
或clearTimeout
等方法,停止定时器任务。 - 取消订阅:调用事件监听的取消方法,移除事件监听器。
示例代码:
onDestroy() {
if (this.timer) {
clearInterval(this.timer);
}
if (this.subscription) {
this.subscription.unsubscribe();
}
}
通过上述操作,确保在组件销毁时释放相关资源,避免内存泄漏。