Android中通过NTP服务器获取时间功能源码分析

本文分析了Android中通过NTP服务器获取时间的源码,强调注释的重要性,并提供了一段修改后的代码以提高可读性。虽然作者有信心代码无误,但未经过测试,提醒读者在实际使用时应进行测试。作者分享了编程经验,提倡自信但不自负,建议写完代码后编写测试用例。
摘要由CSDN通过智能技术生成
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


public void systemReady() {
        registerForTelephonyIntents();
//注册定时器广播
        registerForAlarms();
//注册网络连接消息广播
        registerForConnectivityIntents();
//创建用于接收NTP请求事件的HandlerThread
//用于处理:
//            EVENT_AUTO_TIME_CHANGED:
//            EVENT_POLL_NETWORK_TIME:
//            EVENT_NETWORK_CONNECTED:
//三个消息
        mThread = new HandlerThread(TAG);
        mThread.start();
        mHandler = new MyHandler(mThread.getLooper());
        // Check the network time on the new thread
//发送请求NTP时间消息        
        mHandler.obtainMessage(EVENT_POLL_NETWORK_TIME).sendToTarget();
//添加一个用于监听设置中时间改变消息通知
        mSettingsObserver = new SettingsObserver(mHandler, EVENT_AUTO_TIME_CHANGED);
        mSettingsObserver.observe(mContext);
    }

 

MyHandler


    /** Handler to do the network accesses on */
    private class MyHandler extends Handler {

        public MyHandler(Looper l) {
            super(l);
        }

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                c
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值