安卓系统无法自动对时的问题
来源:互联网 发布:淘宝物流信息不更新 编辑:程序博客网 时间:2024/05/16 10:19
大家在使用Android系统的时候,可能会发现,在不插sim卡仅连wifi的情况下使用自动对时,可能很久都无法对时成功。现在给大家讲解下Android系统的自动对时功能。
在分析引发此问题的原因之前,先来了解下网络对时的两个基本概念:
(1)NITZ:
NITZ(Network Identity and Time Zone)或网络标识和时区,是一种用于自动配置本地的时间和日期的机制,同时也通过无线网向移动设备提供运营商信息。NITZ是自从PHASE 2+ RELEASE 96 的GSM中的可选功能,经常被用来自动更新移动电话的系统时钟。
(2)NTP:
NTP(Network Time Protocol)提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。时间按NTP服务器的等级传播。
Android的自动对时功能就是通过使用NITZ者或NTP和服务器进行时间同步,其中NITZ优先于NTP(插入sim卡
时使用NITZ,没插卡仅连wifi时使用NTP),使用这个功能的前提是网络通讯正常,可以正确无误的收发包。那么问
题来了,触发Android自动对时的条件有哪些呢?
Android自动对时触发条件有三个:
(1)EVENT_AUTO_TIME_CHANGED,点击“自动获取时间”选项时
(2)EVENT_POLL_NETWORK_TIME,轮询定时器周期已到的时候
(3)EVENT_NETWORK_CONNECTED, 网络连接成功的时候
第一个触发条件,单次有效,也就是点击的时候才会触发;
第二个触发条件,开机时开始轮询,最多查询三次,如果第一次自动对时失败,则间隔60s再查询第二次,如果连续
三次都自动对时失败,则间隔24小时再做下一次查询;
第三个触发条件,网络连接成功,包括wifi连接和sim卡的运营商网络连接,也是单次有效;
由于Android使用UDP协议发送自动对时的数据包,在网络环境不好或者服务器响应不及时的情况下,很可能造
成获取服务器时间数据包失败,因此造成自动对时失败。刚才上面讲到了,第一种和第三种触发条件是单次响应,第
二种触发条件是开机后连续间隔60s轮询三次。开机后连接wifi,触发条件产生时,在系统向NTP服务器连续发送3次
以上UDP数据包失败后,将不会有新的触发条件产生(除非手动操作,但这样做太费时),因此最终导致自动对时失
败。
现在知道为什么Android系统会概率性的网络对时失败了,那么应该如何规避这个问题呢?
经过跟踪代码流程和大量测试发现,只需要修改一个源文件中的两个变量就可以解决此问题。
~/Framework/base/service/java/com/android/server/NetworkTimeServiceUpdate.java
修改POLLING_INTERVAL_SHORTER_MS和TRY_AGAIN_TIMES_MAX
改成如下数值:
POLLING_INTERVAL_SHORTER_MS = 20 * 1000L
TRY_AGAIN_TIMES_MAX = 300
- 安卓系统无法自动对时的问题
- video标签在安卓webview下无法自动播放问题的解决方法
- 安卓EditText有时点击后无法自动弹出键盘的解决办法;TextWatcher多次调用问题
- 安卓adb无法连接的问题
- 安卓无法收到推送的问题
- 安卓5.0以上系统无法调用WebService问题
- 基于Linux kernel 3.14版本移植安卓系统后触摸屏无法使用的问题
- 关于安卓6.0以上系统中无法搜索到蓝牙设备的问题
- 关于Eclipse开发安卓系统时的继承问题
- 安卓系统编译遇到的问题
- Win10系统任务栏无法自动隐藏问题
- 安卓开发问题之无法自动生成或更新R.java文件
- 安卓系统中对SD卡的操作
- 如何解决安卓SDK无法下载Package的问题
- 如何解决安卓SDK无法下载Package的问题
- 如何解决安卓SDK无法下载Package的问题
- 解决 安卓SDK无法下载的问题
- 如何解决安卓SDK无法下载Package的问题
- ios 7 statusbar 状态栏 跟随navigationbar的颜色而改变
- 实例化只包含私有带参构造函数对象
- Java 跳出单个循环、多重嵌套循环
- 常用图像压缩方法的对比
- 一些高危php函数的禁用
- 安卓系统无法自动对时的问题
- EPOLL 判断客户端连接关闭
- 制作水晶报表------crystal report designer 的使用和 安装
- linux安装gnome
- 正则表达式 匹配电话号码,带+86的哦
- inline-block的常见应用场景
- AADL开发中Osate和Java中的jdk问题
- c#调用存储过程时 SqlParameter 中传递参数时ref参数的设置方法
- Kafka学习4_Kafka创建、查看和删除Topic