瑞芯微Rockchip开发者社区
直播中

杨勇

7年用户 1173经验值
私信 关注
[问答]

android自动对时不成功的原因有哪几点

android自动对时不成功的原因有哪几点?
怎样去解决RK3288整机连接wifi无法自动对时的问题呢?

回帖(1)

方春晓

2022-3-10 10:27:41
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、对于获取到异常时间做兼容处理。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分