currentTimeMillis()与uptimeMillis()区别

Android  2021年3月31日 pm12:03发布4年前 (2021)更新 91es.com站长
79 0 0

前言

项目中,由于需要做防爆力点击,需要计算用户点击的时间间隔。

虽然也经常使用,但偶尔还是忘了该用哪个,以及这两个之间的区别,因此,抽空整理一下,摘抄于此。

Android中计算时间间隔的方法

记录开始时间 startTime,然后每次回调时,获取当前时间 currentTime,计算差值 = currentTime - startTime,而获取当前时间间隔

总结

  1. SystemClock.uptimeMillis() 从开机到现在的毫秒数(手机睡眠的时间不包括在内
  2. System.currentTimeMillis() // 从1970年1月1日 UTC到现在的毫秒数

由于系统时间存在变化,因此我们在进行判断时间间隔时使用的是SystemClock.uptimeMillis()

下面是计算时间间隔的demo代码

    long startTime = SystemClock.uptimeMillis();
    // 开始执行某代码片段
    long endTime = SystemClock.uptimeMillis();

    //计算时间间隔
    long interval = endTime - startTime;

正文

SystemClock.uptimeMillis()

    /**
     * Returns milliseconds since boot, not counting time spent in deep sleep.
     *
     * @return milliseconds of non-sleep uptime since boot.
     */
    @CriticalNative
    native public static long uptimeMillis();

注释说明了,是系统开机到现在的时间。

下面是网用总结的:

uptimeMillis()获取的时间表示系统开机到当前的时间总数,单位是毫秒,但是,当系统进入深度睡眠(CPU休眠、屏幕休眠、设备等待外部输入)时间就会停止,但是不会受到时钟缩放、空闲或者其他节能机制的影响。

System.currentTimeMillis()

    /**
     * Returns the current time in milliseconds.  Note that
     * while the unit of time of the return value is a millisecond,
     * the granularity of the value depends on the underlying
     * operating system and may be larger.  For example, many
     * operating systems measure time in units of tens of
     * milliseconds.
     *
     * <p> See the description of the class <code>Date</code> for
     * a discussion of slight discrepancies that may arise between
     * "computer time" and coordinated universal time (UTC).
     *
     * @return  the difference, measured in milliseconds, between
     *          the current time and midnight, January 1, 1970 UTC.
     * @see     java.util.Date
     */
    public static native long currentTimeMillis();

currentTimeMillis()获取的是系统的时间。

这个不可以作为时间间隔判断,因为系统时间存在变化(比如时间同步了,用户改变了当前时间或者时区)

我们可以通过下面方式改变系统时间

SystemClock.setCurrentTimeMillis(long millis)

参考文章

  1. System.currentTimeMillis()与SystemClock.uptimeMillis()
  2. Android时间间隔 SystemClock.uptimeMillis 和 System.currentTimeMillis

版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

史铁生:爱情是孤独的证明

我知道一位现代女性,她说只要她的丈夫是爱她的,她丈夫的性对象完全可以不限于她,她说她能理解,她说她自己并不喜欢这样但是她能理解她的丈夫,她说:“只要他爱我,只要他仍然是爱我的,只要他对别人不是爱,他只爱我。”可是,当那男人真的有了另外的性对象而且这样的事情慢慢多起来时,这位现代女性还是陷入了痛苦。...

余秀华:一潭水

这是我喜欢的时刻:黄昏深了一些,夜色尚浅我的灵魂如此清澈,在树叶上滚动一灯一影,我如此赤裸裸地活着,影子可以更长些留一部分供养阴影 的确有水从四面八方涌来,向四面八方散去我在水里小幅度地摇摆把一些词语光亮的部分挑在草尖上我喜欢被诗句围困,再呕心沥血找一条出路 ...

git config时fatal not in a git directory

前言最近通过git config修改邮箱和密码是出行如下异常提示:fatal: not in a git directory记录一下,方便自己查阅正文之前使用git config时也没有出行这样的问题,但最近在客户的虚拟机中折腾就出现了。常用命令git config --listg...

沈从文 :生命

我好像为什么事情很悲哀,我想起“生命”。有什么人能用绿竹作弓矢,射入云空,永不落下?我之想象,犹如长箭,向云空射去,去即不返。长箭所注,在碧蓝而明静之广大虚空。明智者若善用其明智,即可从此云空中,读示一小文,文中有微叹与沉默,色与香,爱和怨。无著者姓名。无年月。无故事。无……然而内容极柔美。虚空...

adb shell settings 参数命令集合

前言Android中配置有很多参数,一般可以通过Log日志打印,但是想偷懒因此这里介绍部分参数可以通过命令直接查看配置的值。下面就介绍一些使用adb shell settings 等命令获取Android中配置的值。PS:注意红色字体,不同的settings参数获取的方式不同小结用了ge...

解决java.io.File android.content.Context.getDatabasePath(java.lang.String)

前言首先,这个问题有点神奇。比如,出现问题的原因:new.SQLiteOpenHelper()时,Context不能是Application的Context如果传入Application,会java.io.File android.content.Context.getDatabasePat...