1***@qq.com
1***@qq.com
  • 发布:2021-12-20 11:21
  • 更新:2022-07-29 16:20
  • 阅读:916

【报Bug】uni.offAccelerometerChange加速度计api取消监听方法无法正常使用。会导致开启再次进入页面叠加问题

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win 10

HBuilderX类型: 正式

HBuilderX版本号: 3.2.12

手机系统: Android

手机系统版本号: Android 12

手机厂商: 小米

手机机型: 小米9pro

页面类型: vue

vue版本: vue2

打包方式: 离线

项目创建方式: HBuilderX

示例代码:
  uni.onAccelerometerChange(function (res) {}) 开启监听  
  uni.offAccelerometerChange(function (res) {}) 关闭监听(无法正常使用)  

操作步骤:

在show方法添加 uni.onAccelerometerChange(function (res) {}) 开启监听,推出这个页面在进就累计叠加。
uni.offAccelerometerChange(function (res) {}) 关闭监听(无法正常使用)

预期结果:

退出此页面,需要取消这个api加速度计的监听,

实际结果:

会累积叠加此api,取消监听无法使用,报错不是一个function

bug描述:

在app开发新功能使用到官方api 加速度计的api,
问题一:在b页面使用后,退出b页面在进b页面,uni.onAccelerometerChange 会叠加开启多个监听,如果在监听添加自己定义的接口请求,会同时执行多次。
问题二:使用这个api后在官方这个文档中有取消监听加速度数据uni.offAccelerometerChange 这个api,但是在代码中正常使用的时候找不到这个api,在打印uni =所有方法出来也没找到这个api方法。

2021-12-20 11:21 负责人:无 分享
已邀请:
DCloud_UNI_LXH

DCloud_UNI_LXH

可升级至 3.2.16 使用,实测没有问题,offAccelerometerChange 和 onAccelerometerChange 传同一个方法即可

  • 1***@qq.com (作者)

    我安装了3.2.16sdk和hbx,但是发现offaccelerometerChange这个api还是无法使用销毁api,可以看看使用这个api的代码片段?

    2021-12-20 18:57

  • DCloud_UNI_LXH

    回复 1***@qq.com: 无法使用是什么意思?你传同一个方法即可销毁。你在 method 上定义的方法,监听的时候传入,销毁的时候也传入就行了

    2021-12-21 10:37

  • 1***@qq.com (作者)

    回复 DCloud_UNI_LXH: 最新sdk3.2.16和hbx3.2.16本地打包到手机似乎得到了解决

    2021-12-21 18:07

幻飞鱼

幻飞鱼

我也遇到了这个问题,看了这个帖子现在解决了
核心问题是 offAccelerometerChange 和 onAccelerometerChange 的callback要传同一个方法
你的示例代码里面,两个都是匿名函数
你换成同一个方法再试试,我是这么解决的

  • 1***@qq.com (作者)

    我在最新sdk本地打包到手机上就好像得到了解决

    2021-12-21 18:06

8***@qq.com

8***@qq.com

问题已经解决,借用前人方法

监听和取消监听使用同样的方法,比如methods中定义的处理方法叫excute(res){......}
监听和取消监听就应该这么写:

// 监听  
uni.onCompassChange(this.excute)  
// 取消监听  
uni.offCompassChange(this.excute)

该问题目前已经被锁定, 无法添加新回复