有时候我们会发现,手机能够正常上网,而且已勾选“自动获取网络时间”,可是等待十几分钟甚至几个小时都没有发现时间更新。这里说明一下Android手机是如何自动更新时间的。
手机获取网络时间用到NTP服务,NTP是网络时间协议(Network time Protocol),它是用来同步网络中各个设备的时间的协议。NTP更新时间的时间点有:开机,auto date/time setting打开,网络连接,开机后每隔24小时同步一次网络时间。
当开机的时候,如果NTP无法通过mobile data connecttion上网,拿到正确的时间,这时候NTP会每隔60秒后进行一次retry,最大retry三次,如果三次都不行,则需要等用户更新auto date/time setting或重新连接网络或等待24小时之后,系统才会尝试去更新时间。
在NetworkTimeUpdateService.java文件中,我们可以设置一些关于时间更新的参数。
/** Normal polling frequency */
private static final long POLLING_INTERVAL_MS = 24L * 60 * 60 * 1000; // 24 hrs
/** Try-again polling interval, in case the network request failed */
private static final long POLLING_INTERVAL_SHORTER_MS = 60 * 1000L; // 60 seconds
/** Number of times to try again */
private static final int TRY_AGAIN_TIMES_MAX = 3;
时间更新需要的event: private static final int EVENT_AUTO_TIME_CHANGED = 1;
private static final int EVENT_POLL_NETWORK_TIME = 2;
private static final int EVENT_NETWORK_CONNECTED = 3;
private static final int EVENT_GPS_TIME_SYNC_CHANGED = 4;