繁体   English   中英

Android加速计(通常为Java)如何处理回叫侦听器?

[英]How does Android accelerometer (Java in general) handles call back listeners?

这个问题是Java而非Android的基本知识。 如果侦听器界面中的代码进行了一些复杂的计算,则系统给定的回调会发生什么。 在Android中,加速度计的读数收集在onSensorChanged(SensorEvent event)中。 如果我要处理“事件”数据,则每秒调用30-40次。 怎么了 ?

这会减少对函数的调用吗? 还是这会滞后于输出,但是所有调用最终都将被执行?

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

还是应该考虑使用TimerTask而不是每500毫秒收集一次数据?

无论如何,您都无法在回调中执行复杂的计算。 如果花了几秒钟完成操作,则应以ANR结尾。

最好的解决方案是创建另一个线程,并将所需事件的值保存到该线程中。 在该线程中,您可以随时处理保存的值。 由于我们正在谈论加速度计,因此可能应该是200-250ms。

我建议不要在任何列表器中写您费时的实现。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM