我需要在Android上测量长时间间隔,但可能会在其中发生设备重启。
据我所了解,System.nanoTime() 每次设备重启都会被重置,而 System.currentTimeMillis() 不可靠,因为用户可以更改它。
我能想到的唯一解决方案是监听 ACTION_SHUTDOWN 和 BOOT_COMPLETED,使用 System.currentTimeMillis() 计算经过的时间(希望用户在设备关闭时无法更改时钟)并将其添加到之前关闭前拥有的最后一个 System.nanoTime() 中。
老实说,我不喜欢这个解决方案,因为它既昂贵(我需要监听2个广播事件),又不准确,但我想不出其他方法来解决这个问题。
有什么好主意吗?对我来说,本地解决方案也很好。
据我所了解,System.nanoTime() 每次设备重启都会被重置,而 System.currentTimeMillis() 不可靠,因为用户可以更改它。
我能想到的唯一解决方案是监听 ACTION_SHUTDOWN 和 BOOT_COMPLETED,使用 System.currentTimeMillis() 计算经过的时间(希望用户在设备关闭时无法更改时钟)并将其添加到之前关闭前拥有的最后一个 System.nanoTime() 中。
老实说,我不喜欢这个解决方案,因为它既昂贵(我需要监听2个广播事件),又不准确,但我想不出其他方法来解决这个问题。
有什么好主意吗?对我来说,本地解决方案也很好。
clock_realtime
和clock_monotonic
。Android设备会根据外部时间源(可能是NTP、GSM、GPS等)自动调整System.currentTimeMillisec()
,无需用户干预,而且可能在启动时(即在BOOT_COMPLETED
之前)进行。您也可以使用外部时间服务,但需要网络访问。 - zapl