注:本文不讨论NITZ时间
源码位置:
frameworks/base/services/core/java/com/android/server/NetworkTimeUpdateService.java
frameworks/base/core/java/android/util/NtpTrustedTime.java
frameworks/base/core/res/res/values/config.xml
【更新逻辑】
NetworkTimeUpdateService 网络时间更新服务,在系统刚开机时随着SystemServer就启动的,
开机后,如系统数据库中自动时间设置项 Settings.Global.AUTO_TIME 有变化,或网络可用,则触发一次Ntp时间更新,
【更新规则如下】
1) 如果系统没有设置自动时间更新,或者无可用网络,则不会更新;
2) 如果有过一次来自Modem的时间(NITZ)更新,且更新时间间隔小于24h, 则不会更新;
3) 如果没有进行过Ntp更新,或者距离上一次Ntp更新间隔大于24h,或Auto_time设置改变了(手动设置时间 -> 自动时间),则继续;
4) Ntp中缓存时间大于24h,则初始化一次;(初次进入会强制更新一次,但可能会因为没有联网而失败);
5) 经过4)后,如果Ntp缓存时间小于24h(说明Ntp请求成功了),并且从Ntp获取的时间和当前系统时间差大于5s,或者是初次Ntp请求,则,设置系统时间为Ntp请求的时间。并会设置每24h同步一次。
6) 否则,Ntp请求失败了(网络没连接,或者服务器故障不可

本文分析了Android系统中NetworkTimeUpdateService的网络时间更新逻辑,包括更新规则和触发更新的事件。当自动时间设置开启且有网络时,系统会进行Ntp时间更新。更新条件包括:Ntp缓存时间超过24小时、与系统时间差大于5秒或初次Ntp请求。如果更新失败,将在1分钟后重试,3次失败后等待24小时再试。

902

被折叠的 条评论
为什么被折叠?



