方法uptimeMillis的说明如下:
返回自引导以来的毫秒数,而不是 计算在深度睡眠中度过的时间。 注意:此值可能会重置 偶尔(在此之前) 否则就好了。
这种情况发生的频率(更重要的是)是否会影响应由Handler.postAtTime执行的可运行文件?
答案 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()
不会更新)。如果这是一个问题,那么我会使用其他方法。