Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在安卓系统中,触摸显示器和调用onTouchEvent之间的延迟有多大、多一致?_Java_Android_Performance_Android Ndk_Touch - Fatal编程技术网

Java 在安卓系统中,触摸显示器和调用onTouchEvent之间的延迟有多大、多一致?

Java 在安卓系统中,触摸显示器和调用onTouchEvent之间的延迟有多大、多一致?,java,android,performance,android-ndk,touch,Java,Android,Performance,Android Ndk,Touch,在我的学士学位论文中,我需要编写一个Android应用程序,从用户那里获得非常精确和一致的反应时间(每毫秒都很重要)。它将用于心理学研究。我正在使用Android SDK和Java 用户可以“反应”的方式之一是触摸显示屏 目前,我在onTouchEvent(事件)回调中调用System.nanoTime()。 我从中减去起始值(System.nanoTime()使用的aso)以获得反应时间 但我担心的是,在用户实际触摸显示器后,系统调用此方法的速度、准确度和一致性(随时间/在不同设备上)有多快

在我的学士学位论文中,我需要编写一个Android应用程序,从用户那里获得非常精确和一致的反应时间(每毫秒都很重要)。它将用于心理学研究。我正在使用Android SDK和Java

用户可以“反应”的方式之一是触摸显示屏

目前,我在onTouchEvent(事件)回调中调用System.nanoTime()。 我从中减去起始值(System.nanoTime()使用的aso)以获得反应时间

但我担心的是,在用户实际触摸显示器后,系统调用此方法的速度、准确度和一致性(随时间/在不同设备上)有多快

我心中可能存在的问题:
a) 由于使用的硬件不同,不同设备上的延迟不同
b) 由于可以首先执行的其他线程而导致的延迟
c) Java语言的高级特性-->您永远不知道(也无法控制)后台在什么时间/顺序发生了什么

我怎么知道这件事?使用NDK(C++)可以帮助我获得更准确和一致的值吗?谢谢

我需要编写一个Android应用程序,从用户那里获得非常精确和一致的反应时间(每毫秒都很重要)

Android不是实时操作系统(RTOS)

我心中可能存在的问题

你的前两个是有效的。严格地说,第三个不是,因为Java与其他编程语言相比没有更多的“在后台发生”的东西。然而,Java本质上较慢,增加了延迟

在大多数情况下,您还需要考虑可能正在运行的其他应用程序,因为它们也需要CPU时间,而且只有这么多CPU核心可供使用

我怎么知道这件事

你不会有一个很好的方法来衡量一个人的参与。毕竟,如果您确切地知道用户何时触摸屏幕(测量它与
onTouchEvent()
)之间的时间,您只需使用该机制,而不是
onTouchEvent()

可以创建非人类参与者。有人发明了使用电容式触笔轻触屏幕的机器人。从理论上讲,如果你有很好的同步时钟,你可以确定机器人点击屏幕的时间和你收到
onTouchEvent()
调用的时间。拥有“精确同步的时钟”本身可能很困难,而创造一个触摸屏机器人是它自己的工程实践

使用NDK(C++)可以帮助我获得更准确和一致的值吗

我不知道在这种情况下你是如何定义“准确”的。我不希望NDK有助于保持一致性。它应该有助于最大限度地减少触摸屏和您了解触摸屏之间的延迟(使用游戏开发人员用于了解触摸屏的基于NDK的任何工具)