退出页面释放监听

更新时间:

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

清除定时器

推荐级别:强烈

每使用一次 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 等),页面退出时必须清除监听。原因同上。

反例

import event from '@blueos.app.event.eventManager'
export default {
  onInit() {
    event.subscribe({
      eventName: 'usual.event.SCREEN_AOD',
      callback: function (res) {
        // do something
      },
    })
  },
  onDestroy() {},
}
复制代码

正例

import event from '@blueos.app.event.eventManager'
let eventIds = []
export default {
  onInit() {
    eventIds.push(
      event.subscribe({
        eventName: 'usual.event.SCREEN_AOD',
        callback: function (res) {
          // do something
        },
      })
    )
  },
  onDestroy() {
    eventIds.forEach((evtId) => {
      event.unsubscribe({ id: evtId })
    })
  },
}
复制代码
以上内容对您是否有帮助?
  • 毫无帮助
  • 帮助不大
  • 一般
  • 很好
  • 非常好
意见反馈