NTP和NITZ简介

本文介绍了NTP(网络时间协议)和NITZ(网络标识和时区)的工作原理及其在Android系统中的应用。NTP通过网络同步时间,NITZ由运营商提供时间及时区信息。在Android中,NITZ优先级高于NTP,当NITZ更新时间未超过10天,NTP将不再更新。
摘要由CSDN通过智能技术生成

一、NTP和NITZ简介

NITZ:Network Identity and Time Zone(网络标识和时区),是一种用于自动配置本地的时间和日期的机制,需要运营商支持,可从运营商获取时间和时区具体信息。
NTP:Network Time Protocol(网络时间协议),用来同步网络中各个计算机的时间的协议。在手机中,NTP更新时间的方式是通过GPRS或wifi向特定服务器获取时间信息(不包含时区信息)。

二、NTP功能实现流程
2.1、Service的初始化和监听器的注册
首先在SystemServer中,初始化NewNetworkTimeUpdateService并且调用

NewNetworkTimeUpdateService.systemRunning()方法,
NetworkTimeUpdateService networkTimeUpdater = null;
if (useNewTimeServices) {
networkTimeUpdater = new NewNetworkTimeUpdateService(context);
} else {
networkTimeUpdater = new OldNetworkTimeUpdateService(context);
}
if (networkTimeUpdaterF != null) {
networkTimeUpdaterF.systemRunning();
}

在初始化NewNetworkTimeUpdateService时,会调用NtpTrustedTime.getInstance(context)指定我们使用的NTP服务器和相应超时时间,并且实例化AlarmManager和ConnectivityManager;在调用systemRunning()方法时,注册监听NITZ、Alarm、网络状态变化以及设置中自动更新时间开关的变化;

public NewNetworkTimeUpdateService(Context context) {
mContext = context;
mTime = NtpTrustedTime.getInstance(context);
mAlarmManager = mContext.getSystemService(AlarmManager.class);
mCM = mContext.getSystemService(ConnectivityManager.class);

Intent pollIntent = new Intent(ACTION_POLL, null);
mPendingPollIntent = PendingIntent.getBroadcast(mContext, POLL_REQUEST, pollIntent, 0);

//较长的时间间隔,当同步时间成功后的下一次自动同步的时间间隔,默认为24小时
mPollingIntervalMs = mContext.getResources().getInteger(
com.android.internal.R.integer.config_ntpPollingInterval);
//较短的时间间隔,当同步时间失败后的下一次自动同步的时间间隔,默认为1分钟
mPollingIntervalShorterMs = mContext.getResources().getInteger(
com.android.internal.R.integer.config_ntpPollingIntervalShorter);
//当同步时间失败后,会重新尝试同步的次数
mTryAgainTimesMax = mContext.getResources().getInteger(
com.android.internal.R.integer.config_ntpRetry);
//时间会更新的阈值,只有服务器上的时间和设备时间相差超过这个阈值时,才会更新时间

mTimeErrorThresholdMs = mContext.getResources().getInteger(
        com.android.internal.R.integer.config_ntpThreshold);

mWakeLock = context.getSystemService(PowerManager.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值