Android 游戏中的计时错误,currentTimeMillis冻结?

Android 游戏中的计时错误,currentTimeMillis冻结?,android,Android,当测试我们的游戏时,它严重依赖于System.currentTimeMillis(),我们遇到了一个恼人的bug 我们的游戏使用一组delta时间戳来指示某些事情应该发生的时间。这些时间戳与正在播放的音乐片段相匹配 在家里测试一点问题都没有。在我们家进行测试时,不可能复制错误 但是,在车里、城市之间行驶时进行测试,会给我们带来时间戳和音乐之间的同步问题。我最好的猜测是Android冻结了系统,包括系统计时器,因为它正在切换网络,或者在寻找信号 我试着在游戏中插入一个假hick up,当我按下某个

当测试我们的游戏时,它严重依赖于
System.currentTimeMillis()
,我们遇到了一个恼人的bug

我们的游戏使用一组delta时间戳来指示某些事情应该发生的时间。这些时间戳与正在播放的音乐片段相匹配

在家里测试一点问题都没有。在我们家进行测试时,不可能复制错误

但是,在车里、城市之间行驶时进行测试,会给我们带来时间戳和音乐之间的同步问题。我最好的猜测是Android冻结了系统,包括系统计时器,因为它正在切换网络,或者在寻找信号

我试着在游戏中插入一个假hick up,当我按下某个按钮时让线程休眠几秒钟。这会冻结屏幕(很明显),但当睡眠结束时,一切仍然同步良好

复制这个bug的唯一方法是坐汽车、公共汽车或火车旅行——当然,这是大多数人玩游戏时最可能去的地方

问题当然是,

  • 怎么办

  • 有人有什么想法吗

  • 阅读

    System.currentTimeMillis()是标准的“墙上”时钟(时间和 日期)表示自历元以来的毫秒数。挂钟可以是 由用户或电话网络设置(请参阅setCurrentTimeMillis(long)), 因此,时间可能会不可预测地向前或向后跳跃


    系统启动后,uptimeMillis()以毫秒为单位计数。 当系统进入深度睡眠(CPU关闭,显示)时,该时钟停止 暗,设备等待外部输入),但不受时钟影响 缩放、空闲或其他节能机制。这是我们的基础 大多数间隔计时,如线程睡眠(mills), Object.wait(毫秒)和System.nanoTime()。这个钟是有保证的 单调,适用于当间隔 不跨越设备睡眠


    我认为最好使用。

    你的游戏是什么?你能解释一下吗?现在在这里:www.PirateDiamonds.com:-)我最后使用了
    SystemClock.elapsedRealtime()
    ,到目前为止,我们没有再看到错误。谢谢@卢先生,听到这个消息很高兴。