【问题标题】:How accurate can a stopwatch be in Android OS?秒表在 Android 操作系统中的准确度如何?
【发布时间】:2012-05-11 05:57:04
【问题描述】:

所以我需要为 android 设备(变压器平板电脑)制作一个简单但可靠的秒表,精度为 1 毫秒。我对安卓完全没有经验。 搜索后,我没有找到任何关于我在这个特定上下文中可以获得的最大准确度的细节(如下所述)。也许这里有人可以给我我需要的信息。 由于秒表将用于时间反应和诊断,因此我们需要 1 毫秒的准确度。

秒表应该做的事情很简单:

  • 显然程序从 00:00.000 开始,从那里将采取 7 项措施。当用户按下按键或屏幕时,程序应记录经过的时间。在第 7 次,程序会将测量值保存在 txt 文件中。

我什至不需要显示戳记或经过的时间并刷新显示。 除了操作系统应用程序,没有其他应用程序将运行。

理论上 System.nanoTime() 或时间戳会做到这一点。但我不确定这是否会给我所需的 1 毫秒精度。 他们能给我我正在寻找的准确性吗?一个简短的解释会很有用。 还有其他方法吗? 如果有人是 android 开发人员,我们将不胜感激。

谢谢,

更新:尽管用户 Nanno 对 Android 操作系统的限制提出了有效的观点,因此在“仅限平板电脑”的情况下不可能实现 1 毫秒精度秒表,朱利安的进一步回答描述了一个使用 Android ADK(外部硬件)实现目标的有趣且相对便宜的解决方案。

【问题讨论】:

  • 是什么让您认为在 Activity 上单击按钮总是会在
  • @mariomario 因为 System.currentTimeMillis 提供毫秒精度毫秒精度
  • @JulianHigginson 你没有任何意义。再次阅读问题。谢谢
  • 我已阅读您的问题。如果我提出的问题对您没有任何意义,那么您真的需要考虑一下实时软件的实际含义。
  • 您担心计时器子系统的准确性。我建议,如果您没有比触摸事件处理程序更好的准确性来获取用户生成的计时器子系统的消息,那么计时器子系统的准确性并不重要。

标签: timer android stopwatch


【解决方案1】:

一个

http://developer.android.com/guide/topics/usb/adk.html

将按钮连接到板上,并将您的时序代码放入远程处理器(AVR,使用 arduino 工具编程。对于嵌入式初学者来说非常容易)然后通过 USB 在 android 平板电脑和开放式附件开发套件之间进行通信以显示平板电脑上的结果。

当然,如果您希望人们能够从 google play 将它下载到他们在世界各地的设备上,那么这个解决方案当然不是很有用...但是看到您提到了一个特定的设备,也许您只是想制作这个项目是为你自己做的吗?

在这种情况下,它是可行的,只是以非常迂回的方式。

【讨论】:

  • 看来这就是要走的路!!。而且它不会很贵,并且已经有标准化的组件,所以我不必临时构建它。它还支持PIC。 (我正在考虑使用 PIC,但从头开始,这样可以节省时间)感谢朱利安提供的信息。 pdta:看来你在这方面很有经验,有机会聊聊吗?
  • pdta:是的,该项目仅供我自己使用。
  • 根据您的评论,您似乎将正确答案奖授予了错误答案。
  • Nanno 的回答更接近原始问题(仅平板电脑 + android),提供了简要说明,尽管您的第二个回答为该问题提供了一个很好的替代解决方案。反正我把正确答案奖改成了你的答案。
  • 很公平,尽管他的回答也是对我在 cmets 中对原始问题所说的话的重新措辞......
【解决方案2】:

以您当前的设置,我怀疑您能否获得这种准确性,仅仅是因为users push a key or the screen 的不准确性。

在您成功推送屏幕、捕获事件并调用函数之前,您的准确性将会关闭。尤其是当您想到 nanoTime 时,界面会在您的测量中添加一个我不相信的随机因素。

Android 不是为运行实时程序而设计的,即使您没有在后台运行其他程序,系统也已为它做好了准备。它可以在后台广播意图或做其他意想不到的事情。当然,您的界面确实具有优先权,但是您所暗示的准确性?我不这么认为。

【讨论】:

  • 非常感谢您的回答。自我解释。是的,可悲的是,似乎根本不可能,也没有办法解决。
  • 更进一步......您认为在我的问题中描述的场景中可以达到的准确度范围是多少?
  • 问题在于它是不可预测的。我怀疑(但只是在这里猜测!)这将是关于你可以做对的 ms。但是为了消除准确性/与精度之间的混淆,我认为谈论毫秒和反应时间真的很难,因为人类无法以毫秒精度做出反应。如果我们谈论的是触摸事件与时钟停止,当然,您可能会获得甚至小于 1 毫秒的余量,但在实际触摸之前,您会在反应时间中损失很多?
  • 我有点困惑,因为你说“ms”不确定你的意思是“ONE ms”。我会尝试清除这一点。对视觉刺激(Go/No-Go)的典型反应可能在 180 和 220 毫秒左右。两个人之间大约 20 或 30 毫秒的差异代表不同的大脑功能。拥有 1 毫秒精度的秒表的目标是避免测量中的错误和噪音,这些错误和噪音不是个人表现的一部分,而是由于系统性能(硬件、软件)造成的。当然可以接受更大程度的错误,但这也意味着诊断的准确性降低。
  • 我会说在大多数情况下(系统不忙)以大约 2 毫秒的误差幅度进行测量就足够了,防御性猜测。但这些都将是猜测。 “我们”已经确定此设置对于实时应用程序来说并不完美,但对于您的目的来说它可能已经足够好了。我可能不得不对此进行测试。如果您有一个可以通过自动“触摸”测量实际时间和记录时间的设置,您可以检查一下。或者比较一个主题的几个可预测的结果(统计上更难,但可行)。
【解决方案3】:

为什么不使用 System.currentTimeMillis,你可以找到here 一个秒表的例子,它写成具有毫秒精度。

【讨论】:

  • 因为 System.currentTimeMillis 提供毫秒精度毫秒精度
【解决方案4】:

你应该先试试这个:

使用您的 Android 平板电脑(但不适用于 Android 操作系统)在按键和时钟停止之间获得 1 毫秒的准确度是合理的。对于安卓设备,您应该使用 UBUNTU

在这里获取:http://www.ubuntu.com/devices/android

关于代码,使用C++高精度定时器。

将应用和调用设置为更高的优先级。

正如我所说,试试吧。你可以节省时间和金钱! (比开始购买外部硬件更好)

【讨论】:

    【解决方案5】:

    关于使用 System.currentTimeMillis 作为秒表的评论,我一直在尝试在此应用程序中使用它,但当用户更改开始和停止事件之间的时间时它会失败。例如,当秒表开始计时 5 分钟事件时,当前时间可能是下午 3:09。

    然后,在下午 3:11,用户可以将时间提前一小时,即下午 4:11。然后,5 分钟后,秒表停止,并调用 System.currentTimeMilli's,它将在下午 4:14 返回。程序将减去两次并返回秒表经过的时间 1 小时 5 分钟(而不是正确的 5 分钟)!!!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 2010-09-22
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多