Android 中触摸显示屏和调用 onTouchEvent 之间的延迟有多大和一致?
How big and consistent is the delay between touching the display and the call to onTouchEvent in Android?
为了完成我的学士论文,我需要编写一个 Android 应用程序,以从用户那里获得非常准确和一致的反应时间(每一毫秒都很重要)。它将用于心理学研究。我正在使用 Android SDK 和 Java。
用户可以 "react" 的方法之一是触摸显示屏。
目前,我在 onTouchEvent(event) 回调中调用了 System.nanoTime()。
我从中减去起始值(与 System.nanoTime() 一样)以获得反应时间。
但我担心在用户实际触摸显示屏后系统调用此方法的速度、准确度和一致性(随着时间的推移/在不同的设备上)。
我想到的可能问题:
a) 由于使用的硬件不同,不同设备上的延迟不同
b) 由于其他可以先执行的线程而延迟
c) Java 语言的高级性质 --> 你永远不知道(也无法控制)在 time/order 处后台发生了什么。
我怎么才能知道这件事?使用 NDK(C++) 可以帮助我获得更准确和一致的值吗?谢谢!
I need to write an Android app that gets very exact and consistent reaction times (every millisecond matters) from the user
Android 不是实时操作系统 (RTOS)。
Possible problems I have in mind
你的前两个有效。第三个不是,严格来说,Java 并不比其他编程语言多 "happening in the background" 东西。但是,Java 本质上较慢,增加了延迟。
在大多数情况下,您还需要考虑其他可能 运行 的应用,因为它们也需要 CPU 时间,而且只有这么多 CPU要绕过的核心。
How could I find out about this?
你不会有一个很好的方法来衡量这个与人类参与者。毕竟,如果您确切知道用户触摸屏幕的时间(以测量它与 onTouchEvent()
之间的时间),您只需使用该机制 而不是 onTouchEvent()
.
可以创建非人类参与者。有人创造了使用电容式手写笔点击屏幕的机器人。理论上,如果您的时钟同步得很好,您可以确定机器人点击屏幕的时间以及您收到 onTouchEvent()
呼叫的时间。拥有 "nicely synchronized clocks" 本身可能很困难,而创建屏幕触摸机器人是其自身的工程练习。
Could using the NDK(C++) help me get more accurate and consistent values?
我不知道你在这种情况下是如何定义 "accurate" 的。我不希望 NDK 有助于保持一致性。它应该有助于最大程度地减少屏幕触摸和您发现该屏幕触摸之间的延迟(使用游戏开发人员用来了解屏幕触摸的任何基于 NDK 的工具)。
为了完成我的学士论文,我需要编写一个 Android 应用程序,以从用户那里获得非常准确和一致的反应时间(每一毫秒都很重要)。它将用于心理学研究。我正在使用 Android SDK 和 Java。
用户可以 "react" 的方法之一是触摸显示屏。
目前,我在 onTouchEvent(event) 回调中调用了 System.nanoTime()。 我从中减去起始值(与 System.nanoTime() 一样)以获得反应时间。
但我担心在用户实际触摸显示屏后系统调用此方法的速度、准确度和一致性(随着时间的推移/在不同的设备上)。
我想到的可能问题:
a) 由于使用的硬件不同,不同设备上的延迟不同
b) 由于其他可以先执行的线程而延迟
c) Java 语言的高级性质 --> 你永远不知道(也无法控制)在 time/order 处后台发生了什么。
我怎么才能知道这件事?使用 NDK(C++) 可以帮助我获得更准确和一致的值吗?谢谢!
I need to write an Android app that gets very exact and consistent reaction times (every millisecond matters) from the user
Android 不是实时操作系统 (RTOS)。
Possible problems I have in mind
你的前两个有效。第三个不是,严格来说,Java 并不比其他编程语言多 "happening in the background" 东西。但是,Java 本质上较慢,增加了延迟。
在大多数情况下,您还需要考虑其他可能 运行 的应用,因为它们也需要 CPU 时间,而且只有这么多 CPU要绕过的核心。
How could I find out about this?
你不会有一个很好的方法来衡量这个与人类参与者。毕竟,如果您确切知道用户触摸屏幕的时间(以测量它与 onTouchEvent()
之间的时间),您只需使用该机制 而不是 onTouchEvent()
.
可以创建非人类参与者。有人创造了使用电容式手写笔点击屏幕的机器人。理论上,如果您的时钟同步得很好,您可以确定机器人点击屏幕的时间以及您收到 onTouchEvent()
呼叫的时间。拥有 "nicely synchronized clocks" 本身可能很困难,而创建屏幕触摸机器人是其自身的工程练习。
Could using the NDK(C++) help me get more accurate and consistent values?
我不知道你在这种情况下是如何定义 "accurate" 的。我不希望 NDK 有助于保持一致性。它应该有助于最大程度地减少屏幕触摸和您发现该屏幕触摸之间的延迟(使用游戏开发人员用来了解屏幕触摸的任何基于 NDK 的工具)。