当设备处于低功耗模式时,SystemClock.elapsedRealtime()会漂移

Leo*_*yev 5 android

根据API文档以及之前的SO线程,SystemClock.elapsedRealtime()即使设备处于休眠状态,也应该保持准确的时间.这不是我观察到的.

我写了一个简单的时钟,它位于一个while (true)循环中,并根据值的值更新屏幕上的时间SystemClock.elapsedRealtime().如果我同步两个设备上的时钟,例如通过NTP,然后在其中一个设备上开启和关闭屏幕几次,显示的时间将漂移最多+/- 0.7秒.(这仅在手机未连接外部电源时发生,因此睡眠模式可能是此处的罪魁祸首).

这是正常的吗?这是Android中的错误吗?有没有办法通过睡眠/唤醒周期保持~20毫秒的定时精度?

小智 2

我也遇到了同样的问题,所以今晚我尝试将计时方法从 更改SystemClock.elapsedRealtime()System.currentTimeMillis()。到目前为止,一切都很好。当我点击应用程序并返回时,时间并没有漂移。
我已经在服务中使用 Runnable 对其进行了测试。我目前正在主活动中使用 Runnable 对其进行测试,并在应用程序失去焦点时使用共享首选项来存储所有内容。我还没有决定这两种方法中哪一种最好 - 但似乎currentTimeMillis不会受到时间漂移问题的影响elapsedRealtime

我知道谷歌不建议用于currentTimeMillis计时目的,但当应用程序失去焦点时,它似乎可以更好地保持正确的时间。