Android中通过NTP服务器获取时间功能源码分析
来源:互联网 发布:tvb翡翠台直播软件 编辑:程序博客网 时间:2024/06/06 20:55
1 相关文件:
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
2 实现原理:
2.1 SystemServer的run中:
ActivityManagerService.self().systemReady(new Runnable() {
public void run() {
try {
if (networkTimeUpdaterF != null) networkTimeUpdaterF.systemReady();
} catch (Throwable e) {
reportWtf("making Network Time Service ready", e);
}
...
}
2.2 再来看看NetworkTimeUpdateService中的相关代码:
systemReady
在看这个函数之前先来理解几个相关变量,理解了这几个变量之后,该函数就比较好理解了。
在NetworkTimeUpdateService的构造函数中:
mPollingIntervalMs
当NTP时间获取成功后,再次请求NTP时间的间隔
mPollingIntervalShorterMs
当NTP时间获取失败后,再次请求NTP时间的间隔
mTimeErrorThresholdMs
当NTP时间和系统时间不相同时,要更新系统时间的阀值
这几个变量的值是通过资源文件里读取的,配置的地址为config.xml,来看看相关的内容:
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
2 实现原理:
2.1 SystemServer的run中:
ActivityManagerService.self().systemReady(new Runnable() {
public void run() {
try {
if (networkTimeUpdaterF != null) networkTimeUpdaterF.systemReady();
} catch (Throwable e) {
reportWtf("making Network Time Service ready", e);
}
...
}
2.2 再来看看NetworkTimeUpdateService中的相关代码:
systemReady
MyHandler
重点来看看onPollNetworkTime这个函数:
在看这个函数之前先来理解几个相关变量,理解了这几个变量之后,该函数就比较好理解了。
在NetworkTimeUpdateService的构造函数中:
几个关键的变量:
mPollingIntervalMs
当NTP时间获取成功后,再次请求NTP时间的间隔
mPollingIntervalShorterMs
当NTP时间获取失败后,再次请求NTP时间的间隔
mTimeErrorThresholdMs
当NTP时间和系统时间不相同时,要更新系统时间的阀值
这几个变量的值是通过资源文件里读取的,配置的地址为config.xml,来看看相关的内容:
其实只要看下注释这几个变量的功能就清楚了,可见注释是多么的重要,如果要自己看代码理解的话,可能要花比较多的时间。
好,最后来看下onPollNetworkTime的代码:改了下,个人感觉比原来代码更容易理解了:
哪个代码更清晰,大家仁者见仁,智者见智,各取所好。
当然,我要声明一下,虽然我很有信心我改的代码没有问题,但是该代码我没有经过测试的,所以不要随便替换。
多年的写代码的经验告诉我,自信要有,但是不要自负,大脑是的优势在于创造,而机器的优势在于精确。
所以,在实际的工作中,写完代码之后,写测试用例测试下吧!
(完)
0 0
- Android中通过NTP服务器获取时间功能源码分析
- Android 通过NTP服务器自动获取时间的方法
- Android 通过NTP服务器自动获取时间的方法
- 通过NTP服务器获取网络时间C++
- 获取NTP时间服务器时间
- ntp时间服务器源码安装
- Java通过Ntp服务器获取网络时间修改本地服务器时间
- Android获取NTP网络时间
- Linux之通过NTP协议实现服务器时间同步的源码
- 从网络获取时间 NTP服务器
- 从NTP服务器获取时间(C#)
- android ntp更改网络时间服务器
- 使用NTP服务器同步Android设备时间
- 使用NTP服务器同步Android设备时间
- NTP服务器同步android系统时间
- 时间服务器:NTP服务器
- 时间服务器: NTP 服务器
- (源码分析)Android系统时间-自动获取
- ubuntu下安装codeblocks13.12
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C++虚基类
- hdu1686 Oulipo(KMP)
- 连载:面向对象葵花宝典:思想、技巧与实践(19) - 功能点提取
- Android中通过NTP服务器获取时间功能源码分析
- 计算机CMD命令
- LeetCode Remove Duplicates from Sorted Array II
- ganglia gmetad : is a 2.5 or later data stream 问题原因及解决方法
- Half Lambert光照模型
- 第四周 项目4扩展 多文件执行
- 【编程好习惯】判断失败而不是成功
- HDU 1012u Calculate e
- JVM工作原理之四:JVM内存管理