我需要测量Android上的较长运行时间,并且可能会在两者之间重新启动设备。在Android上测量很长的运行时间(重新启动)
从我所了解的情况来看,System.nanoTime()
在每次设备重启时都会重置,并且System.currentTimeMillis()
由于用户可以更改而不可靠。
,我想出了是听ACTION_SHUTDOWN
和BOOT_COMPLETED
,使用System.currentTimeMillisec()
来计算经过时间(用户无法更改时钟时间,而设备处于关闭状态,希望:)),并把它添加到唯一的解决办法最后System.nanoTime()
我在关闭之前。
我老实说不喜欢这个解决方案,因为它非常昂贵(我需要听2个广播事件)并且不准确,但我找不出任何其他方式来做到这一点。
任何想法?另外一个本地解决方案对我来说也很好。
我不认为有更好的方法。至少你必须收听两个系统广播,BOOT_COMPLETED和ACTION_SHUTDOWN。您可以优化这两者的剩余内容。但我相信这是你必须做的最低要求。 –
http://stackoverflow.com/questions/3523442/difference-between-clock-realtime-and-clock-monotonic应该是这两者背后的时间。 Android设备会根据外部时间源(可能是NTP,GSM,GPS,?)自动调整'System.currentTimeMillisec()' - 无需用户干预,可能在启动时(即在BOOT_COMPLETED之前)。您也可以使用外部时间服务,但需要网络访问权限。 – zapl
愿意重写平台时钟以击败你的用户很可能是一个只需拦截/修补正在使用的任何系统调用来读取它们的用户。 –