frameworks/base/core/res/res/values/config.xml
864000000/对时重试次数用完后,再次回归时间为10 day。
60000//1min
3
5000
20000//20s
frameworks/base/core/java/android/net/SnapClient.java
long requestTime = System.currentTimeMillis();//请求时间为机器当前时间
long requestTicks = SystemClock.elapsedRealtime();//请求时间节点为请求时机器开机时间
long responseTicks = SystemClock.elapsedRealtime();//响应时间节点为响应时机器开机时间
long responseTime = requestTime + (responseTicks - requestTicks);//响应时间为请求时间+请 求时长
long originateTime = readTimeStamp(buffer, ORIGINATE_TIME_OFFSET);//原时间偏移
long receiveTime = readTimeStamp(buffer, RECEIVE_TIME_OFFSET);//接收到时间偏移
long transmitTime = readTimeStamp(buffer, TRANSMIT_TIME_OFFSET);//传输时间偏移
long roundTripTime = responseTicks - requestTicks - (transmitTime - receiveTime);//路由往返时间为 请求时长- (传输时间偏移-接收时间偏移)
if (originateTime <= 0) {
Log.d(TAG, "1->originateTime: " + originateTime+" requestTime:"+requestTime);
clockOffset = ((receiveTime - requestTime) + (transmitTime - responseTime)) / 2;
} else {
clockOffset = ((receiveTime - originateTime) + (transmitTime - responseTime)) / 2;
}
mNtpTime = responseTime + clockOffset;
mNtpTimeReference = responseTicks;
mRoundTripTime = roundTripTime;
对于android 自动对时的原生逻辑,在RK,mtk,高通的方案上都出现过概率自动对时不成功的原因,原因有如下几点:
1、NTP服务器原生是2.android.pool.ntp.org,而请求对时的原因是基于有可用的网络情况下,通过此域名向DNS发送域名解析请求获取代理服务器地址,得到代理地址后建立socket发送对时请求,实际情况有时候返回的代理地址是非法的,所以不会响应对时请求消息,或者返回错误的时间;
2、自身网络问题;
3、请求间隔时间过短,请求过于频繁。
解决方案是:
1、将NTP服务器更改为国内NTP服务站点域名;(最好多建立几个轮询)
2、当连续3此发送对时请求都没有得到响应没建议换一个NTP域名重新发送请求;
3、对于获取到异常时间做兼容处理。
frameworks/base/core/res/res/values/config.xml
864000000/对时重试次数用完后,再次回归时间为10 day。
60000//1min
3
5000
20000//20s
frameworks/base/core/java/android/net/SnapClient.java
long requestTime = System.currentTimeMillis();//请求时间为机器当前时间
long requestTicks = SystemClock.elapsedRealtime();//请求时间节点为请求时机器开机时间
long responseTicks = SystemClock.elapsedRealtime();//响应时间节点为响应时机器开机时间
long responseTime = requestTime + (responseTicks - requestTicks);//响应时间为请求时间+请 求时长
long originateTime = readTimeStamp(buffer, ORIGINATE_TIME_OFFSET);//原时间偏移
long receiveTime = readTimeStamp(buffer, RECEIVE_TIME_OFFSET);//接收到时间偏移
long transmitTime = readTimeStamp(buffer, TRANSMIT_TIME_OFFSET);//传输时间偏移
long roundTripTime = responseTicks - requestTicks - (transmitTime - receiveTime);//路由往返时间为 请求时长- (传输时间偏移-接收时间偏移)
if (originateTime <= 0) {
Log.d(TAG, "1->originateTime: " + originateTime+" requestTime:"+requestTime);
clockOffset = ((receiveTime - requestTime) + (transmitTime - responseTime)) / 2;
} else {
clockOffset = ((receiveTime - originateTime) + (transmitTime - responseTime)) / 2;
}
mNtpTime = responseTime + clockOffset;
mNtpTimeReference = responseTicks;
mRoundTripTime = roundTripTime;
对于android 自动对时的原生逻辑,在RK,mtk,高通的方案上都出现过概率自动对时不成功的原因,原因有如下几点:
1、NTP服务器原生是2.android.pool.ntp.org,而请求对时的原因是基于有可用的网络情况下,通过此域名向DNS发送域名解析请求获取代理服务器地址,得到代理地址后建立socket发送对时请求,实际情况有时候返回的代理地址是非法的,所以不会响应对时请求消息,或者返回错误的时间;
2、自身网络问题;
3、请求间隔时间过短,请求过于频繁。
解决方案是:
1、将NTP服务器更改为国内NTP服务站点域名;(最好多建立几个轮询)
2、当连续3此发送对时请求都没有得到响应没建议换一个NTP域名重新发送请求;
3、对于获取到异常时间做兼容处理。
举报