3

uptimeMillis方法的描述说:

返回自启动以来的毫秒数,不计算深度睡眠所花费的时间。 注意:此值可能会偶尔重置(否则会回绕)。

这种情况多久会发生一次,(更重要的是)它会影响应该由Handler.postAtTime执行的可运行文件吗?

4

3 回答 3

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 将由于变量包装而被重置后不久 - 与单调时钟完全相反!

于 2011-01-04T18:02:42.700 回答
2

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

struct timespec 在 time_t 中保存秒数,这似乎是一个 32 位值。如果它在零附近开始计数,那么当它换行时,您将不太可能还活着。

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

于 2011-01-06T00:35:28.197 回答
0

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

于 2011-01-04T18:06:40.047 回答