【问题标题】:What does System.nanoTime() return in Android?System.nanoTime() 在 Android 中返回什么?
【发布时间】:2013-07-08 16:20:56
【问题描述】:

我有一堆活动捆绑在一起,一个进入下一个,依此类推。现在,在一项活动中,我想测量经过的时间。据我了解,我会使用System.nanoTime() 来查找开始时间,用户做一些事情,然后再次使用它来查找结束时间,减去两者,瞧我在活动上花费的时间。但是假设在我的活动运行时发生了一些事情:我已经创建了开始时间,但是现在用户接到电话或其他什么,我的活动被放到了后台。电话结束,用户返回活动。即使应用程序在后台,计时器是否一直在运行?自从我离开应用程序后,计时器是否“重置”然后又回来了?

另外,当我启动System.nanoTime() 时,它是返回自该特定活动或主要活动开始以来的时间?

编辑:假设我在某个点设置了第一个刻度线,然后应用程序进入后台,然后它返回到前台并设置了第二个刻度线。理想情况下,我希望经过的时间以及在后台花费的时间; System.nanoTime() 能做到这一点吗?

【问题讨论】:

    标签: android timer elapsed


    【解决方案1】:

    static long nanoTime():

    返回本地系统上可用的最精确计时器的当前时间戳。

    您没有使用“计时器”(即任何类型的有状态对象)来表示经过的时间,您只是在等待很长时间。正如您所指出的,您将在将来某个时间点再次调用 System.nanoTime() 并减去以找到经过的时间。

    如果您想排除在此活动之外花费的时间,例如您问题中的示例,您将需要使用 onPause()onResume() 来帮助您管理计算。或者,如果您切换到某种计时器对象,请使用这些方法来暂停和恢复计时器。

    您可以在任何您认为最有意义的地方“启动”您的“计时器”。如果是在用户启动某些操作(如按下按钮)时,请在 OnClickListener 中进行处理。如果只是为了衡量某个方法/代码路径运行了多长时间,请在开始时进行。

    【讨论】:

      【解决方案2】:

      根据doc

      System.nanoTime() 返回当前最精确的值 可用的系统计时器,以纳秒为单位。

      所以它不是计时器。它只是以纳秒为单位返回系统时间。与活动无关。

      如果您想测量活动的生命周期,请在 onCreate 和 onDestroy 中获取时间。如果您想知道活动在前台运行了多长时间,请在 onResume 和 onPause 中获取时间。

      【讨论】:

        【解决方案3】:

        您将需要覆盖 Activity 类中的 onPause()onResume() 方法,以便您可以暂停计时器。并在 onResume 中恢复。

        你应该把 System.nanoTime() 放在 onResume() 上

        【讨论】:

        • 我认为可能是这种情况,onResume() 不过,System.nanoTime() 会返回您暂停前的时间以及您恢复后的时间,这基本上是我所期望/想要的?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-02
        • 2011-03-13
        • 2022-01-01
        • 1970-01-01
        • 2013-10-03
        相关资源
        最近更新 更多