uptimeMillis方法的描述说:
返回自启动以来的毫秒数,不计算深度睡眠所花费的时间。 注意:此值可能会偶尔重置(否则会回绕)。
这种情况多久会发生一次,(更重要的是)它会影响应该由Handler.postAtTime执行的可运行文件吗?
uptimeMillis方法的描述说:
返回自启动以来的毫秒数,不计算深度睡眠所花费的时间。 注意:此值可能会偶尔重置(否则会回绕)。
这种情况多久会发生一次,(更重要的是)它会影响应该由Handler.postAtTime执行的可运行文件吗?
如果你碰巧在它包裹的时候调用了 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 将由于变量包装而被重置后不久 - 与单调时钟完全相反!
uptimeMillis 调用在 systemTime() 中终止,在 Linux 系统上它变成 clock_gettime(CLOCK_MONOTONIC, struct timespec *)。
struct timespec 在 time_t 中保存秒数,这似乎是一个 32 位值。如果它在零附近开始计数,那么当它换行时,您将不太可能还活着。
如果您需要更具体的细节,您应该调查 Linux 内核中 clock_gettime(CLOCK_MONOTONIC) 的行为。
我将它用于服务,但从未看到它重置。我真的会假设它不会。问题postAtTime()
在于它不会在睡眠期间被调用(因为uptimeMillis()
不会更新)。如果这是一个问题,那么我会使用其他方法。