[英]How big and consistent is the delay between touching the display and the call to onTouchEvent in Android?
对于我的学士论文,我需要编写一个 Android 应用程序,从用户那里获得非常精确和一致的反应时间(每一毫秒都很重要)。 它将用于心理学研究。 我正在使用 Android SDK 和 Java。
用户可以“做出反应”的一种方式是触摸显示屏。
目前,我在onTouchEvent(event)回调中调用System.nanoTime() 。 我从中减去起始值(与System.nanoTime() 一起使用)以获得反应时间。
但我担心在用户实际触摸显示器后系统调用此方法的速度、精确性和一致性(随着时间的推移/在不同的设备上)。
我想到的可能问题:
a) 由于使用的硬件不同,不同设备上的延迟不同
b) 由于其他线程可以先执行而导致的延迟
c) Java 语言的高级特性 --> 您永远不会真正知道(也无法控制)后台在什么时间/顺序发生了什么。
我怎么知道这件事? 使用 NDK(C++) 可以帮助我获得更准确和一致的值吗? 谢谢!
我需要编写一个 Android 应用程序,从用户那里获得非常精确和一致的反应时间(每一毫秒都很重要)
Android 不是实时操作系统 (RTOS)。
我想到的可能问题
你的前两个是有效的。 严格来说,第三个不是,因为 Java 没有比其他编程语言更多的“在后台发生”的东西。 但是,Java 本质上更慢,会增加延迟。
在大多数情况下,您还需要考虑可能正在运行的其他应用程序,因为它们也需要 CPU 时间,并且只有这么多 CPU 内核可以运行。
我怎么知道这件事?
你不会有一个很好的方法来衡量这个与人类参与者。 毕竟,如果您确切地知道用户何时触摸屏幕(以测量它与onTouchEvent()
之间的时间),您只需使用该机制而不是onTouchEvent()
。
可以创建非人类参与者。 有些人创造了使用电容式触控笔点击屏幕的机器人。 理论上,如果您有很好的同步时钟,您可以确定机器人点击屏幕的时间以及您收到onTouchEvent()
调用的时间。 拥有“良好同步的时钟”本身可能很困难,而创造一个触摸屏幕的机器人是它自己的工程实践。
使用 NDK(C++) 可以帮助我获得更准确和一致的值吗?
我不知道您在这种情况下如何定义“准确”。 我不希望 NDK 有助于保持一致性。 它应该有助于最大限度地减少屏幕触摸和您发现屏幕触摸之间的延迟(使用游戏开发人员用来查找屏幕触摸的任何基于 NDK 的工具)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.