有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我如何知道我的应用程序中两个操作之间经过了多少时间?

我正在开发一个Android应用程序,我遇到了这个问题

例如,如果我删除一个文件(操作a)并收到一个新文件(操作B),我想知道两个操作之间经过了多少时间。我希望在用户更改系统日期、关闭互联网或重新启动设备的情况下,它也能正常工作

我知道存在SystemClock.elapsedRealtime(),但如果用户重新启动设备,它的值将从零重新启动

我不能使用System.currentTimeMillis(),因为如果用户更改日期,它会更改

我从网上找不到约会对象

谢谢


共 (2) 个答案

  1. # 1 楼答案

    你只需要在活动前后的某个地方抓紧时间,从另一个地方抓紧时间。这将使用系统时钟,但您同样可以从其他来源获得实时数据

        long startTime = System.currentTimeMillis();
        // Your code
        System.out.println("Operation took " + (System.currentTimeMillis() - startTime) + " milliseconds");
    
  2. # 2 楼答案

    使用System.currentTimeMillis()。它获取自纪元(1970年1月1日)以来经过的时间

    您需要一个全局变量:

    long start;
    

    关于第一项行动:

    start = System.currentTimeMillis();
    

    由于这是从新纪元开始的时间,重新启动设备不会改变它(即System.nanoTime将被重置)。但是,与大多数其他方法一样,更改设备的时间并不安全。如果有人将设备上的时间更改回新纪元的开始,您将遇到一些问题

    请注意,如果时间发生更改,则无法获取事件发生后的确切时间。也就是说,如果用户执行操作A,等待几个小时,将时钟设置回几个小时前,基本上没有离线方式可以检查。如果您使用服务器,您可以从中获取时间,但是没有任何方法可以获得准确的、未修改的脱机时差,这是防篡改的(篡改会改变时间)

    TL;DR:System.currentTimeMillis是一个脱机选项,但它不安全,不受时间变化的影响。如果您需要它独立于用户更改设备时间来显示正确的时差,请使用服务器

    编辑:

    如果你不能使用System.currentTimeMillis或从互联网上获取时间,你根本无法测量时间。另外,每个Java/Android API都依赖于系统。currentTimeMillis(或通过其他方式获取当前时间)。示例:Date类可以转换为表示当前时间(以毫秒为单位)的Long。对于长期计时,您必须使用系统。currentTimeMillis或服务器System.nanoTime在JVM重新启动时重新启动。elapsedRealTime也是如此