根据API文档以及以前的SO threads,即使设备处于 sleep 状态,SystemClock.elapsedRealtime()
也应保持准确的时间。这不是我观察到的。
我编写了一个简单的时钟,它位于while (true)
循环中,并根据SystemClock.elapsedRealtime()
的值更新屏幕上的时间。如果我同步两个设备上的时钟,例如通过NTP,然后继续在其中一台设备上打开和关闭屏幕几次,显示的时间将最多漂移+/- 0.7秒。 (这只会在手机未连接外部电源时发生,因此, sleep 模式很可能是造成这种情况的原因)。
这正常吗?这是Android中的错误吗?有没有办法在整个 sleep /唤醒周期中保持约20毫秒的计时精度?
最佳答案
我遇到了同样的问题,所以今晚我尝试将计时方法从SystemClock.elapsedRealtime()
更改为System.currentTimeMillis()
。到现在为止还挺好。当我单击该应用程序并返回时,时间并没有漂移。
我已经在服务中使用Runnable对其进行了测试。我目前正在主 Activity 中使用Runnable对其进行测试,并在应用失去焦点时使用sharedprefs来存储所有内容。
我还没有决定这两种方法中哪一种最好-但是currentTimeMillis
似乎没有受到elapsedRealtime
的漂移时间问题的困扰。
我知道Google不建议将currentTimeMillis
用于计时目的,但是当应用失去焦点时,它似乎可以更好地保持正确的时间。
关于android - 设备处于低功耗模式时,SystemClock.elapsedRealtime()漂移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11231657/