安卓加速计(通常是Java)如何处理回叫侦听器?

安卓加速计(通常是Java)如何处理回叫侦听器?,java,android,Java,Android,这个问题是Java的基本问题,而不是android。如果侦听器接口中的代码进行了一些复杂的计算,那么系统给出的回调会发生什么情况。在Android中,加速度计读数收集在onSensorChanged(传感器事件)中。 如果我想处理“事件”数据,它每秒调用30-40次。会发生什么 这是否减少了对函数的调用? 或者这会延迟输出,但所有调用最终都会被执行 我知道这应该在单独的线程中处理,但如果大量线程继续生成,这可能是一个问题。 此外,我不能依赖Java System.currentTimeMilli

这个问题是Java的基本问题,而不是android。如果侦听器接口中的代码进行了一些复杂的计算,那么系统给出的回调会发生什么情况。在Android中,加速度计读数收集在onSensorChanged(传感器事件)中。 如果我想处理“事件”数据,它每秒调用30-40次。会发生什么

这是否减少了对函数的调用? 或者这会延迟输出,但所有调用最终都会被执行

我知道这应该在单独的线程中处理,但如果大量线程继续生成,这可能是一个问题。 此外,我不能依赖Java System.currentTimeMillis();每500毫秒ping一次,因为这是不可靠的(在某种程度上,它保证函数不会在500毫秒之前调用,但不会像1000秒之后那样调用最长时间,在我的情况下,这将是一个问题,因为我至少需要500毫秒内的数据)


还是应该考虑TimeTrask,而不是每500毫秒收集数据?

< P>在回调中,无论如何都不能进行复杂的计算。如果它需要几秒钟才能完成,你应该以ANR结束


最好的解决方案是创建另一个线程,并将事件中的值保存到该线程中。在该线程中,您可以随时处理保存的值。因为我们讨论的是加速计,这可能是200-250ms。

我建议不要在任何listner中编写耗时的实现

即使由于应用程序中的要求,建议使用任何与线程无关的队列数据结构

将事件数据放入队列,并在另一端使用它