退出页面释放监听
更新时间:
页面退出的时候取消监听绑定在页面的监听事件
清除定时器
推荐级别:强烈
每使用一次 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 })
})
},
}
复制代码