
1 wxyz 2017-11-03 16:26:29 +08:00 猜测应该有时钟中断,在设置的时间点触发回调。 |
2 coderluan 2017-11-03 16:49:20 +08:00 最底层有个硬件叫 PIT ( Programmable Interval Timer ),操作系统会根据这个实现好闹钟之类的实现,比如 android 下的 AlarmManager 类,开发者只需要调用这个类就行了。所以你的问题是操作系统开发者要考虑的,应用开发者不用关心。 |
3 zhujinliang 2017-11-03 16:54:23 +08:00 via iPhone 每秒钟才一次,有啥性能问题…… |
4 wingoo 2017-11-03 17:03:18 +08:00 lz 知道屏幕的刷新频率 60Hz 是啥意思不? |
5 coolcoffee 2017-11-03 17:06:05 +08:00 html5 的 canvas 写东西,大部分都是实时刷新,也就是每秒钟都要把所有元素重绘 60 次, 楼主会不会觉得 cpu 都要炸了? |
6 ytpfxnj 2017-11-03 17:08:05 +08:00 ``` /** * @return the total amount of time remaining up to this moment; expired timers will return a * negative amount */ public long getRemainingTime() { if (mState == RUNNING || mState == EXPIRED) { return mRemainingTime - (now() - mLastStartTime); } return mRemainingTime; } ``` 可以去考下源代,看看怎的 lineage/packages/apps/DeskClock/src/com/android/deskclock/data/Timer.java |
7 Icezers 2017-11-03 17:15:47 +08:00 Android 手机时刻是有系统广播的,监听就行了, 定时闹钟是向系统注册一个事件,到时间系统广播给你(5.0 以上只有系统签名的 app 可以申请,非系统签名 app 无法在被关闭状态收到广播) |
8 SourceMan 2017-11-03 17:29:48 +08:00 过度优化、过度考虑 |
9 xs 2017-11-03 18:35:29 +08:00 @zhujinliang 这是手机,性能差一倍,待机时长减少将近一半 |
10 234235 2017-11-03 19:05:38 +08:00 如何实现的: 手机 CPU 中有一个子模块 RTC (Real-Time Clock),这个模块能够存储当前日期与 1970-1-1 的差值,并每秒自动加 1。 OS Kernel 中有函数负责配置此值,同时能够定时读取,读取之后当然就传给 OS 中负责 Time 的模块来处理了。 前台时钟如何刷新: 这个当然因软件而异了,不过就算是每秒查询 2 次,也是完全不会对性能有影响的。同时也像上面说的一样,现在都是注册事件调用 CallBack 的方式,查询量就更小了。 |
11 loading 2017-11-03 19:06:50 +08:00 via Android 难道单独设置闹钟芯片? |
12 zhujinliang 2017-11-03 20:46:20 +08:00 via iPhone @xs 还是一样,1 秒进行一次的操作,假设消耗 1ms CPU time,与 2ms CPU time 差别大么?将 2ms 优化到 1ms,只提高了千分之一性能。 如果判断是否到闹钟时间需要 500ms,我觉得你先赶紧优化判断逻辑,而不是纠结是主动查询时间还是等系统回调。 |
13 redsonic 2017-11-03 20:54:23 +08:00 @wxyz http://blog.csdn.net/anonymalias/article/details/52022787 参考 2.6.16 那段高分率的情况。android 框架层没有仔细看过代码不多说,但 android 底层都是调用 posix 函数,最后还是 linux 内核干那些事。 简单说就是内核维护一个 RB-tree,把注册的定时器放进去,然后由硬件时钟源触发中断来运行一段极为高效的代码来操作这个 RB-tree,主要就是激活 callback 和 RB-tree 再排序。 可以理解为有闹钟芯片,还不止一个,且有的定时间隔可设为纳秒。但操作系统只会选择一个来用,不管你挂了多少定时器(有哪些程序 call 了多少次 api ),最后都是这一个芯片触发(按照排好序的 RB-tree )。 |
15 lightening 2017-11-03 20:55:10 +08:00 @xs 就算查个时间占 1000 个 CPU 时钟,以现代手机 1GHz 的 CPU 来说,也才占用手机一百万分之一的性能。如果时钟逻辑性能变差了一倍……嗯,手机续航会减少一百万分之一…… |
16 redsonic 2017-11-03 21:05:03 +08:00 |
17 goodan 2017-11-03 21:09:15 +08:00 感觉 lz 想知道的是赫兹 hz,晶振这些概念 |
18 ys0290 2017-11-03 21:36:29 +08:00 via iPhone 以前在虚拟主机玩儿 wordpress 的时候,有一个插件定时备份数据,有一天发现博客无法访问,问客服,客服说是我那个定时插件把主机搞崩了,是不是在骗我? |