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
服務:
-
SystemClock.currentNetworkTimeClock()
敬上 方法。 - 內部平台函式。舉例來說,A-GPS 可以找出 GNSS (位置) 能更快解決問題。
偵錯和測試
下節說明用於偵錯及測試 以及網路時間偵測功能
與 network_time_update_service 服務互動
如要轉儲 network_time_update_service
的目前狀態,請使用:
adb shell cmd network_time_update_service dump
如要查看有助於測試的一組指令列選項,請使用:
adb shell cmd network_time_update_service help