方法 uptimeMillis 的描述如下:
这种情况会发生多久,更重要的是,它会影响应该由 Handler.postAtTime 执行的可运行项吗?返回自启动以来经过的毫秒数,不包括深度睡眠时间。 注意:此值可能会偶尔重置(在它本应该环绕时)。
这种情况会发生多久,更重要的是,它会影响应该由 Handler.postAtTime 执行的可运行项吗?返回自启动以来经过的毫秒数,不包括深度睡眠时间。 注意:此值可能会偶尔重置(在它本应该环绕时)。
-9,223,372,036,854,775,807 to 9,223,372,036,854,775,807 (~9.2E18)
然而不久后他们又说,由于变量溢出, uptimeMillis 将被重置 - 这与单调时钟的定义完全相反!此时钟保证是单调的...
uptimeMillis调用会转换成systemTime(),在Linux系统上会变成clock_gettime(CLOCK_MONOTONIC, struct timespec *)。
struct timespec中的秒数以time_t形式表示,这似乎是一个32位的值。如果它从零开始计数,当它回绕时,你很可能已经不在了。
如果你需要更具体的细节,你应该研究Linux内核中clock_gettime(CLOCK_MONOTONIC)的行为。
我曾经在一个服务中使用它,从未见过它重置。我真的认为它不会重置。
postAtTime()
的问题是,在睡眠期间它不会被调用(因为 uptimeMillis()
不会更新)。如果这是个问题,那么我会使用其他方法。