2011-06-15 82 views
4

根据Android Developer ReferenceuptimeMillis()返回自启动以来的毫秒数,不计算在深度睡眠中花费的时间。我检查的 uptimeMillis()在我的代码实现,它大致是这个 -使用CLOCK_MONOTONIC的Android(Linux)正常运行时间

struct timespec t; 
t.tv_sec = t.tv_nsec = 0; 
clock_gettime(CLOCK_MONOTONIC, &t); 
return (int64_t)(t.tv_sec)*1000000000LL + t.tv_nsec; 

据我所知,一些不明CLOCK_MONOTONIC数线性,包括睡眠时间。

这里是我的doubts-

  1. 如果CLOCK_MONOTONIC包括睡眠时间,怎么来uptimeMillis()没有考虑到这一点?如果我的理解错误并且CLOCK_MONOTONIC没有考虑睡眠,那么我应该使用什么来获得包括睡眠在内的系统正常运行时间?

  2. 什么是深度睡眠? CPU空闲是否被称为深度睡眠?

  3. 在Linux中,未指定点的值是什么?你能否在代码中指出这个时钟开始的地方?当系统被暂停

回答

9
  1. CLOCK_MONOTONIC停止。有些人觉得这是一个错误,随后出现了添加CLOCK_BOOTTIME时钟的补丁:https://lwn.net/Articles/428176/ 我不知道这些补丁是否已经包含在主线内核中。 CLOCK_BOOTTIME是NDK-9C - 只用了2,5岁;) - 沃伊切赫

  2. 暂停,我猜。

  3. IIRC启动前的一段固定时间。如果您深入内核源代码,您会发现确切的值。然后,关于它的整个点是未指定是它可以在任何时候改变,所以依靠它对我来说似乎是不明智的。

+0

非常感谢janneb!这非常有帮助。但你能详细说明暂停吗?通过暂停,你的意思是这个过程暂停或整个CPU闲置? – 2011-06-15 16:13:45

+0

@Pavan:暂停,因为在整个系统中暂停。 – janneb 2011-06-15 16:34:46

+0

再次感谢!我检查了2.6.35。 'CLOCK_BOOTTIME'还没有!但是'SystemClock.elapsedRealtime()'仍然可以做到!任何想法,它是如何做的? – 2011-06-15 17:29:17