讨论广场 问答详情
陀螺仪页面退出以后,为什么后台日志还一直在刷?
李强0100 2026-09-15 09:41:51
赞 236 评论 分享
harmonyos

页面离开后 UI 已经销毁,但传感器回调还在进。

sensor.on(sensor.SensorId.GYROSCOPE, callback)
aboutToDisappear() {
  this.running = false
}

 

只改状态显然不够,传感器订阅是不是必须跟页面生命周期一起解绑?

赞 236 评论 分享
写回答
全部评论(1)

对,只改 this.running = false 确实不够。传感器的订阅是系统级的,你光改一个布尔值,系统还是会继续把数据推过来,回调函数还会执行,只是你在回调里可能因为 running 是 false 就跳过了业务逻辑,但回调本身并没有真正停掉。

正确做法是在 aboutToDisappear 里主动调 sensor.off 把订阅解除掉。这样页面销毁之后,系统就不会再回调了,也不会出现回调里还在操作已经销毁的 UI 导致报错或者内存泄漏。

另外还有两个细节:一是 callback 要保存成类的成员变量,不要用匿名函数,不然 off 的时候传同一个引用可能匹配不上;二是如果页面有前后台切换的场景,最好在 onPageHide 和 onPageShow 的时候也分别 off 和 on,不要一直开着,传感器常开还是挺耗电的。

赞
2026-09-23 13:38:30