退出页面释放监听

更新时间:

页面退出的时候取消监听绑定在页面的监听事件

清除定时器

推荐级别:强烈

每使用一次 setTimeout / setInterval 时必须要在页面消毁时与其相匹配的 clearTimeout / clearInterval 调用,否则可能会导致持续地内存泄露。

反例

export default {
  onInit() {
    setTimeout(() => {
      // todo something
    }, 1000)

    setInterval(() => {
      // todo something
    }, 1000)
  },
  onDestroy() {},
}
复制代码

正例

let t1,t2;
export default {
  onInit() {
    t1 = setTimeout(() => {
      // todo something
    }, 1000)

    t2 = setInterval(() => {
      // todo something
    }, 1000)
  },
  onDestroy() {
    // 解除内存占用
    clearTimeout(t1)
    clearInterval(t2)
  },
}
复制代码

取消监听事件

推荐级别:强烈

页面中使用的监听类接口(如 feature、C2JS 等),页面退出时必须清除监听。原因同上。

反例

export default {
  onInit() {
    brightness.subscribe({
      callback: (data) => {},
    })
    busineseApp.on('onReceive', callback)
  },
  onDestroy() {},
}
复制代码

正例

export default {
  onInit() {
    brightness.subscribe({
      callback: (data) => {},
    })
    busineseApp.on('onReceive', callback)
  },
  onDestroy() {
    brightness.unsubscribe()
    busineseApp.removeAllListener('onReceive')
  },
}
复制代码

Native 模块释放相关资源

通过 requireModule 申请的资源,如果跟页面绑定,请在页面销毁的时候在页面 onDestroy()中同步销毁,以免造成内存泄漏。

以上内容对您是否有帮助?
  • 毫无帮助
  • 帮助不大
  • 一般
  • 很好
  • 非常好
意见反馈