陀螺仪页面退出以后,为什么后台日志还一直在刷?
harmonyos
页面离开后 UI 已经销毁,但传感器回调还在进。
sensor.on(sensor.SensorId.GYROSCOPE, callback)
aboutToDisappear() {
this.running = false
}
只改状态显然不够,传感器订阅是不是必须跟页面生命周期一起解绑?
您需要先 登录 才能评论/回答
全部评论(1)
对,只改 this.running = false 确实不够。传感器的订阅是系统级的,你光改一个布尔值,系统还是会继续把数据推过来,回调函数还会执行,只是你在回调里可能因为 running 是 false 就跳过了业务逻辑,但回调本身并没有真正停掉。
正确做法是在 aboutToDisappear 里主动调 sensor.off 把订阅解除掉。这样页面销毁之后,系统就不会再回调了,也不会出现回调里还在操作已经销毁的 UI 导致报错或者内存泄漏。
另外还有两个细节:一是 callback 要保存成类的成员变量,不要用匿名函数,不然 off 的时候传同一个引用可能匹配不上;二是如果页面有前后台切换的场景,最好在 onPageHide 和 onPageShow 的时候也分别 off 和 on,不要一直开着,传感器常开还是挺耗电的。
2026-09-23 13:38:30
