System.nanoTime()在Android中返回什么?

时间:2013-07-08 16:20:57

标签: android timer elapsed

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

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

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

3 个答案:

答案 0 :(得分:2)

static long nanoTime()

  

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

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

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

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

答案 1 :(得分:1)

根据doc

  

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

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

如果要测量活动的生命周期,请在onCreate和onDestroy中获取时间。如果你想花时间知道活动在前景中的时间,那么在onResume和onPause中获取时间。

答案 2 :(得分:0)

您需要覆盖Activity类中的onPause()onResume()方法,以便暂停暂停计时器。并继续onResume。

你应该在onResume()

上放置System.nanoTime()