uptimeMillis()重置的频率会影响Handler.postAtTime

时间:2011-01-04 17:09:37

标签: android timer handler uptime

方法uptimeMillis的说明如下:

  

返回自引导以来的毫秒数,而不是   计算在深度睡眠中度过的时间。   注意:此值可能会重置   偶尔(在此之前)   否则就好了。

这种情况发生的频率(更重要的是)是否会影响应由Handler.postAtTime执行的可运行文件?

3 个答案:

答案 0 :(得分:2)

如果你恰好在包装时调用uptimeMillis,那么肯定会影响你的postAtTime调用。

Java中签名的long包含范围:

-9,223,372,036,854,775,807 to 9,223,372,036,854,775,807 (~9.2E18)

9.2E18毫秒是292,277,266年。如果你正在研究太空探测器,你可能想要考虑到这一点,否则你可能会假设它不会在你的生命中包裹起来。

对我来说,踢球者是uptimeMillis声明的Android文档

  

这个时钟保证是   单调的。 。

然后很快他们说uptimeMillis将因为变量换行而被重置 - 与单调时钟完全相反!

答案 1 :(得分:2)

uptimeMillis调用在systemTime()中,在Linux系统上变为clock_gettime(CLOCK_MONOTONIC,struct timespec *)。

struct timespec在time_t中保存秒,该值似乎是32位值。如果它开始在零附近计数,那么当它包裹时你就不会活着。

如果您需要更多具体细节,您应该调查Linux内核中clock_gettime(CLOCK_MONOTONIC)的行为。

答案 2 :(得分:0)

我正在使用它进行服务,并且从未看到它重置。我真的认为它不会。 postAtTime()的问题是它在睡眠期间不会被调用(因为uptimeMillis()不会更新)。如果这是一个问题,那么我会使用其他方法。