java我如何知道我的应用程序中两个操作之间经过了多少时间?
我正在开发一个Android应用程序,我遇到了这个问题
例如,如果我删除一个文件(操作a)并收到一个新文件(操作B),我想知道两个操作之间经过了多少时间。我希望在用户更改系统日期、关闭互联网或重新启动设备的情况下,它也能正常工作
我知道存在SystemClock.elapsedRealtime()
,但如果用户重新启动设备,它的值将从零重新启动
我不能使用System.currentTimeMillis()
,因为如果用户更改日期,它会更改
我从网上找不到约会对象
谢谢
# 1 楼答案
你只需要在活动前后的某个地方抓紧时间,从另一个地方抓紧时间。这将使用系统时钟,但您同样可以从其他来源获得实时数据
# 2 楼答案
使用
System.currentTimeMillis()
。它获取自纪元(1970年1月1日)以来经过的时间您需要一个全局变量:
关于第一项行动:
由于这是从新纪元开始的时间,重新启动设备不会改变它(即
System.nanoTime
将被重置)。但是,与大多数其他方法一样,更改设备的时间并不安全。如果有人将设备上的时间更改回新纪元的开始,您将遇到一些问题请注意,如果时间发生更改,则无法获取事件发生后的确切时间。也就是说,如果用户执行操作A,等待几个小时,将时钟设置回几个小时前,基本上没有离线方式可以检查。如果您使用服务器,您可以从中获取时间,但是没有任何方法可以获得准确的、未修改的脱机时差,这是防篡改的(篡改会改变时间)
TL;DR:
System.currentTimeMillis
是一个脱机选项,但它不安全,不受时间变化的影响。如果您需要它独立于用户更改设备时间来显示正确的时差,请使用服务器编辑:
如果你不能使用
System.currentTimeMillis
或从互联网上获取时间,你根本无法测量时间。另外,每个Java/Android API都依赖于系统。currentTimeMillis(或通过其他方式获取当前时间)。示例:Date类可以转换为表示当前时间(以毫秒为单位)的Long。对于长期计时,您必须使用系统。currentTimeMillis或服务器System.nanoTime
在JVM重新启动时重新启动。elapsedRealTime也是如此