1
wxyz 2017-11-03 16:26:29 +08:00
猜测应该有时钟中断,在设置的时间点触发回调。
|
2
coderluan 2017-11-03 16:49:20 +08:00 2
最底层有个硬件叫 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 1
lz 知道屏幕的刷新频率 60Hz 是啥意思不?
|
5
coolcoffee 2017-11-03 17:06:05 +08:00 1
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 1
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 2
如何实现的:
手机 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 1
感觉 lz 想知道的是赫兹 hz,晶振这些概念
|
18
ys0290 2017-11-03 21:36:29 +08:00 via iPhone
以前在虚拟主机玩儿 wordpress 的时候,有一个插件定时备份数据,有一天发现博客无法访问,问客服,客服说是我那个定时插件把主机搞崩了,是不是在骗我?
|