首页 > 解决方案 > Android - 交换系统。SystemClock.uptimeMillis() 的 currentTimeMillis() - 含义是什么

问题描述

我试图编写以下函数,它给定一个未来的时间会告诉我到那个时间还有多少毫秒:

fun millisFromNow(futureTime: Long): Long {
    val now = Date(System.currentTimeMillis())
    val endDate = Date(futureTime * 1000L)
    return (endDate.time - now.time)
}

但是用户可以更改系统时钟,然后 currentTimeMillis 将不准确.....相反,我可以使用 uptimeMillis

fun millisFromNow(futureTime: Long): Long {
        val now = Date(SystemClock.uptimeMillis())
        val endDate = Date(futureTime * 1000L)
        return (endDate.time - now.time)
    }

自 2004 年以来,它似乎可以在几乎所有设备上运行,对吗?我是否以这种方式正确使用它?因为 currentTimeMillis 是纪元时间,但 uptimeMillis 是自上次启动以来的时间,并假设 JVM 正在运行。所以对我来说这段代码没有意义。? 我只是使用这个函数来启动一个 countdownTimer,所以我只调用它一次。

更新:只是替换它会给出错误的值。只是 system.currentTimeMillis 给出了正确的倒计时。为了安全起见,我可以用什么替换它,这样我就可以在现在和未来的某个时间之间获得正确的毫秒倒计时

标签: androidjava-timesystem-clockcurrent-time

解决方案


推荐阅读