Android SensorEventListener未注销自身

Android SensorEventListener未注销自身,android,listener,sensors,sensormanager,Android,Listener,Sensors,Sensormanager,我一直在开发一个应用程序,需要分几个步骤执行加速度计校准 我所做的是创建一个SensorEventListener,它获取一定数量的读数,达到该数量后,我调用“sensorManager().unregisterListener(eventListener)” 但是,我认为这一行并没有注销侦听器,因为紧接着,由于继续运行,会调用同一行 问题:我这样做是否正确,或者是否应该调整我的处理程序,使其在达到此条件后不允许自己运行(使用if)?如果您的SensorEventListener在取消注册后只被

我一直在开发一个应用程序,需要分几个步骤执行加速度计校准

我所做的是创建一个SensorEventListener,它获取一定数量的读数,达到该数量后,我调用“sensorManager().unregisterListener(eventListener)”

但是,我认为这一行并没有注销侦听器,因为紧接着,由于继续运行,会调用同一行


问题:我这样做是否正确,或者是否应该调整我的处理程序,使其在达到此条件后不允许自己运行(使用if)?

如果您的SensorEventListener在取消注册后只被调用一次,那么这种行为可能是由于Android的多线程特性导致的。因此,如果您想关闭对读数的处理,那么(正如您所建议的),您应该设置一个布尔变量,并使用if语句对其进行测试,以确保在达到极限后不再进行进一步的处理。

我以为每个侦听器都有一个线程,但我想这有点幼稚。布尔值应该同步吗?或者,只有在状态来回更改时才需要这样做吗?在大多数操作系统上,设置或测试布尔值应该是一个原子操作,因此不需要仅为了测试或检查布尔值而进行同步。但是,同步可能是获得所需行为的必要条件。