Android SystemClock 小结

来源:互联网 发布:战地1淘宝哪里买 编辑:程序博客网 时间:2024/05/20 06:53


注意:以后计算时间的间隔,全部使用SystemClock.elapsedRealtime()来进行比较;(可以考虑System.currentTimeMillis)

在Java中我们处理线程同步问题时,处理延迟可能会使用Thread类的sleep方法,这里抛开concurrent类的一些方法;

值得一提的是,这个类还提供了另外一个方法,  public static void sleep(long ms),
这个方法就是封装了Thread.sleep方法,但是不会抛出InterruptedException


http://blog.csdn.net/tianfeng701/article/details/7562359

在Andriod中关于线程一部分中经常会遇到计算时间的操作,这里面应用较多的是SystemClock类,这个类仅仅是一个获取系统时间、运行时间的工具类。

这个类有两个主要的静态方法uptimeMillis()和 elapsedRealtime().

我们来看一下这两个函数的实际含义,以下是源码中的注释

  Returns milliseconds since boot, not counting time spent in deep sleep.      

  This value may get reset occasionally         

native public static long uptimeMillis();

Returns milliseconds since boot, including time spent in sleep.         

native public static long elapsedRealtime();


由此可见,

uptimeMillis()返回的是系统从启动到当前处于非休眠期的时间。

elapsedRealTime()返回的是系统从启动到现在的时间。

 

值得一提的是,这个类还提供了另外一个方法,  public static void sleep(long ms),

这个方法就是封装了Thread.sleep方法,但是不会抛出InterruptedException


-----------------------------------------------------------补充内容-------------------------------------------------------------------------------------------------------

所谓android深度睡眠,即屏幕关闭后,一段时间不做任何操作,不连接usb,然后在一定时间后,手机很多服务、进程都睡眠了,不再运行。


很多情况下,不管是我们自己使用时间间隔来做一些算法,或是调用系统的API,比如动画效果,都会需要基于时间间隔来做,通常做法是:记录开始时间 startTime,然后每次回调时,获取当前时间  currentTime,计算差值 = currentTime - startTime,而获取当前时间,系统提供了两种方法:
SystemClock.uptimeMillis 和 System.currentTimeMillis

这两种方法有何区别呢?
1. SystemClock.uptimeMillis()  // 从开机到现在的毫秒数(手机睡眠的时间不包括在内);
2. System.currentTimeMillis() // 从1970年1月1日 UTC到现在的毫秒数;
但是,第2个时间,是可以通过System.setCurrentTimeMillis修改的,那么,在某些情况下,一但被修改,时间间隔就不准了。


1 0
原创粉丝点击