網路時間偵測

Android 裝置會從以下時間自動嘗試取得正確的 Unix 紀元時間: 做為網路來源Android 採用 SNTP 通訊協定 採用 UDP 通訊協定 ,取得時間資訊。

本頁說明的元件是自動偵測時間的一環 系統稱為聯播網時間來源時間訊號來自 網路時間伺服器可用於設定 Android 裝置的系統時鐘 裝置和「time_detector」支援自動偵測時間功能 Service 會設定為使用 Cloud Storage

根據預設,Android 會使用網路時間來源做為主要指標 自動偵測來源資料。

網路時間偵測系統

在 Android 系統伺服器中執行的 network_time_update_service 服務 實作網路時間偵測系統這項服務會定期使用 SNTP 會從伺服器取得時間訊號。這項服務也會監控網路 沒有最新訊號時,網路連線並觸發重新整理時間 。

network_time_update_service 服務會嘗試取得時間信號 。 服務就會試著維持最新訊號。該模型會平衡 可能會耗用大量負載的個別 Android 裝置 而產生錯誤的原因。

network_time_update_service 會使用內部 API 提交網路時間 向「time_detector」服務提出建議其他 Android 平台 元件後,便會採用這些網路時間建議。

收到網路時間來源的建議後,time_detector 服務會決定是否要根據 設定了優先順序規則

設定自動偵測系統並使用網路來源 請使用 core/res/res/values/config.xml 系統伺服器設定檔。請確認 值 network 包含在想要的 config_autoTimeSourcesPriority 中 位置。詳情請參閱 Time Source Priority。

裝置設定

本節說明裝置製造商如何設定網路 時間偵測系統

基本 Android 開放原始碼計畫設定位於 frameworks/base/core/res/res/values/config.xml:

設定金鑰 Android 開放原始碼計畫值 說明
config_ntpRetry 3 更新失敗後,這是指系統嘗試重新整理的次數 NTP 輪詢時間間隔較短的網路時間輪詢 關閉與使用備份功能前 (config_ntpPollingIntervalShorter) 正常輪詢間隔 (config_ntpPollingInterval)。一個值 0 以下表示系統會重試輪詢時間較短的 NTP 輪詢間隔,直到可以成功重新整理為止。
config_ntpPollingInterval 64800000 (18 小時) 正常網路時間輪詢間隔 (以毫秒為單位)。
config_ntpPollingIntervalShorter 60000 (1 分鐘) 重試網路時間輪詢間隔 (以毫秒為單位)。使用時機 會導致系統重新整理失敗的動作
config_ntpServers 單一項目:ntp://time.android.com NTP 伺服器,用於取得精確時間。項目必須採用以下格式: ntp://<host>[:port]
這不是已註冊的 IANA URI 配置,
config_ntpTimeout 5000 在逾時前等待 NTP 伺服器回應的時間 (單位為毫秒)。

伺服器

根據預設,Android 開放原始碼計畫會使用 time.android.com 的時間伺服器,這是 Google Public NTP。這項服務有 不提供服務水準協議。詳情請參閱 Google Public NTP 常見問題

支援多個伺服器

如果是 Android 14 以上版本,此架構支援 提供多部 NTP 伺服器這在裝置 分散在世界各地,且只有單一設定,但能從該位置存取伺服器 例如「time.android.com」會在特定位置受到限制。

演算法會嘗試在 config_ntpServers 中指定的每個伺服器 設定金鑰找到回應時,系統會繼續使用 直到無法重新整理或裝置重新啟動為止。

準確度

Android 的預設網路時間同步處理作業會使用 SNTP 執行單一時間查詢 請大約每天傳送一次,確保 Google 接收近期的時間訊號。

網路延遲影響最大的因素在於 Android 的 SNTP 實作。SNTP 會假定對稱網路延遲,也就是說 要求的網路延遲時間與 而正確的時間恰好恰好 網路來回。網路封包往返時間通常按照 例如使用有線網路 處理延遲時間幾乎相當接近 對待 使用者。不過,行動或無線電電話服務會分為幾個階段 系統可能會將相對較長的時間延遲插入網路交易 會導致準確率提高。

當 Android 開放原始碼計畫的 config_ntpTimeout 預設設定設為 5000 毫秒時。 如果所有網路延遲都只集中在傳入或傳出 腿部,理論上的誤差最多大約 2.5 秒。

整體系統時鐘準確度也會受 Android 裝置的功能影響 ,在取得時間信號後準確追蹤經過的時間。這是 在 Android 上所有計時,而不只是網路時間偵測 time_detector 服務忽略舊時間建議的原因。 network_time_update_service 服務會定期使用 間隔 config_ntpPollingInterval,即可保留「time_detector」服務 所提供的最新建議,並確保 time_detector 服務不會切換回較低優先順序、通常較低或是 有時會不正確,例如 telephony

使用自動偵測時間時,裝置系統時鐘的準確度可能會降低 例如 time_detector 服務的其他設定 常數和旗標,影響建議時間建議與時間的差異 目前系統時鐘在調整時鐘前 (ServiceConfigAccessorImpl.java)。

裝置製造商可以使用上述設定修改準確度 選項和常數不過,請務必瞭解 平台的 SNTP 實作,並有可能影響耗電量 例如更頻繁的網路作業、對在裝置上執行的應用程式造成影響 更頻繁、更小的時鐘調整,以及對伺服器負載的影響。

網路時間的其他用途

如未設定使用 network 來源自動偵測的時間,或 使用者停用了自動偵測時間功能 (由 下列元件仍在使用 network_time_update_service 服務:

偵錯和測試

下節說明用於偵錯及測試 以及網路時間偵測功能

與 network_time_update_service 服務互動

如要轉儲 network_time_update_service 的目前狀態,請使用:

adb shell cmd network_time_update_service dump

如要查看有助於測試的一組指令列選項,請使用:

adb shell cmd network_time_update_service help