android NTP时间同步
来源:互联网 发布:gm预测软件2007 编辑:程序博客网 时间:2024/05/16 23:07
android NTP时间同步
相关文件:
frameworks/base/services/java/com/android/server/SystemServer.java
frameworks/base/services/java/com/android/server/NetworkTimeUpdateService.java
frameworks/base/core/java/android/util/NtpTrustedTime.java
frameworks/base/core/java/android/net/SntpClient.java
frameworks/base/core/res/res/values/config.xml
一、frameworks/base/services/java/com/android/server/SystemServer.java
里边的ServerThread.run函数中会启用NetworkTimeUpdateService,在这个run函数里,先后顺序为以下代码所示:
163 NetworkTimeUpdateService networkTimeUpdater = null;
772 try {
773 Slog.i(TAG, "NetworkTimeUpdateService");
774 networkTimeUpdater = new NetworkTimeUpdateService(context);
775 } catch (Throwable e) {
776 reportWtf("starting NetworkTimeUpdate service", e);
777 }
926 final NetworkTimeUpdateService networkTimeUpdaterF = networkTimeUpdater;
1034 try {
1035 if (networkTimeUpdaterF != null) networkTimeUpdaterF.systemReady();
1036 } catch (Throwable e) {
1037 reportWtf("making Network Time Service ready", e);
1038 }
二、frameworks/base/services/java/com/android/server/NetworkTimeUpdateService.java
用一个handler处理接收三种消息来触发网络时间同步
EVENT_AUTO_TIME_CHANGED
EVENT_POLL_NETWORK_TIME
EVENT_NETWORK_CONNECTED
然后调用onPollNetworkTime去判断是否要同步网络时间,层层判断以后,会调用mTime.forceRefresh();来同步网络时间,将时间保存了mTime中,然后再调用
SystemClock.setCurrentTimeMillis(ntp);来设置系统时间,long ntp = mTime.currentTimeMillis();
其中mTime = NtpTrustedTime.getInstance(context);
三、frameworks/base/core/java/android/util/NtpTrustedTime.java
forceRefresh函数里会调用SntpClient.requestTime(mServer, (int) mTimeout)来获取时间
mServer为同步时间服务器, mTimeout为请求超时时间,在frameworks/base/core/res/res/values/config.xml中定义为
910 <!-- Remote server that can provide NTP responses. -->
911 <string translatable="false" name="config_ntpServer">2.android.pool.ntp.org</string>
912 <!-- Timeout to wait for NTP server response. -->
913 <integer name="config_ntpTimeout">20000</integer>
四、frameworks/base/core/java/android/net/SntpClient.java
跟进这个SntpClient.requestTime()函数中就能看到其使用udp协议去请求网络时间
那么到底这个网络时间同步有多不靠谱呢?将SntpClient.java拷一份出来到Eclipse上的demo工程里,在应用里用了一下,发现真的很不稳定,如果能连接到,几乎是立马能收到回应,否则就是把超时时间调得再长也没用。
只能在frameworks/base/services/java/com/android/server/NetworkTimeUpdateService.java文件中,将同步时间间隔POLLING_INTERVAL_SHORTER_MS从一分钟改成30秒,并且将最大尝试次数TRY_AGAIN_TIMES_MAX由3改成300,以此优化
- android NTP时间同步
- 使用NTP服务器同步Android设备时间
- 使用NTP服务器同步Android设备时间
- NTP服务器同步android系统时间
- ntp 同步系统时间
- NTP 时间同步
- linux ntp同步时间
- linux ntp时间同步
- NTP时间同步
- NTP时间同步配置
- linux ntp时间同步
- Ntp时间同步
- NTP时间同步
- RAC ntp时间同步
- 时间同步服务器NTP
- linux ntp时间同步
- NTP 网络时间同步
- NTP时间同步设置
- HTTP协议详解
- 使用CAShapeLayer来实现圆形图片加载动画[译]
- 分布式服务框架 Zookeeper
- UISegmentController边框改变
- leetcode笔记:Contains Duplicate
- android NTP时间同步
- 给一个view添加旋转动画,并且停止后保持旋转角度,恢复后可继续旋转。
- 什么情况下使用301重定向
- 版本
- ffmpeg 基础知识整理
- unbantu15.10安装android studio 2.0 beta5
- Runtime.addShutdownHook的用法
- phpmailer 中文使用说明(简易版)
- springmvc集成Quartz