2013-12-10 45 views
2

我需要测量Android上的较长运行时间,并且可能会在两者之间重新启动设备。在Android上测量很长的运行时间(重新启动)

从我所了解的情况来看,System.nanoTime()在每次设备重启时都会重置,并且System.currentTimeMillis()由于用户可以更改而不可靠。

,我想出了是听ACTION_SHUTDOWNBOOT_COMPLETED,使用System.currentTimeMillisec()来计算经过时间(用户无法更改时钟时间,而设备处于关闭状态,希望:)),并把它添加到唯一的解决办法最后System.nanoTime()我在关闭之前。

我老实说不喜欢这个解决方案,因为它非常昂贵(我需要听2个广播事件)并且不准确,但我找不出任何其他方式来做到这一点。

任何想法?另外一个本地解决方案对我来说也很好。

+0

我不认为有更好的方法。至少你必须收听两个系统广播,BOOT_COMPLETED和ACTION_SHUTDOWN。您可以优化这两者的剩余内容。但我相信这是你必须做的最低要求。 –

+0

http://stackoverflow.com/questions/3523442/difference-between-clock-realtime-and-clock-monotonic应该是这两者背后的时间。 Android设备会根据外部时间源(可能是NTP,GSM,GPS,?)自动调整'System.currentTimeMillisec()' - 无需用户干预,可能在启动时(即在BOOT_COMPLETED之前)。您也可以使用外部时间服务,但需要网络访问权限。 – zapl

+0

愿意重写平台时钟以击败你的用户很可能是一个只需拦截/修补正在使用的任何系统调用来读取它们的用户。 –

回答

0

您可以通过使用互联网时间服务器来获取您检查时的时间,以避免用户更改时间。有几种方法可以做到这一点。

如果您只是坚持这个值,那么用户无法做任何事情来搞乱您的计算。

+0

你的想法肯定是正确的,但我正在寻找一些不会增加开销的东西,所以使用NTP对我来说不是一个合适的解决方案。 – dmarcato

+0

据我所知,没有解决方案的电话保证是正确的时间,除非你能以某种方式从运营商获得时间戳。据我所知,这没有暴露。你可能知道收音机基本上是一个独立的操作系统。 –

相关问题