I dispositivi Android tentano automaticamente di ottenere l'ora corretta dell'epoca Unix da un'origine di rete. Android utilizza il protocollo SNTP, che utilizza il protocollo UDP, per ottenere informazioni sull'ora.
I componenti descritti in questa pagina fanno parte del sistema di rilevamento automatico
noto come origine ora della rete. Un indicatore di ora da
è possibile utilizzare un server dell'ora di rete per impostare l'orologio di sistema del dispositivo Android
il rilevamento automatico dell'ora è supportato sul dispositivo e su time_detector
configurato per utilizzarlo.
Per impostazione predefinita, Android utilizza l'origine dell'ora della rete come principale rilevamento automatico dell'ora.
Sistema di rilevamento del tempo di rete
Il servizio network_time_update_service
eseguito sul server del sistema Android
e implementare il sistema di rilevamento
del tempo di rete. Il servizio utilizza periodicamente
SNTP per ottenere un segnale orario da un server. Il servizio monitora anche la rete
e attiva un aggiornamento dell'ora quando non è disponibile alcun segnale dell'ora recente
dopo lunghi periodi di connessione scadente.
Il servizio network_time_update_service
tenta di ottenere un segnale di orario
dopo l'avvio e quando viene stabilita la connettività di rete. La
quindi tenta di mantenere aggiornato l'ultimo segnale. Bilancia
le esigenze dei singoli dispositivi Android con il carico sostanziale che potrebbe
generati da molti dispositivi Android in tutto il mondo e aggiornano il loro tempo.
Utilizzando le API interne, network_time_update_service
invia il tempo di rete
suggerimenti al servizio time_detector
. Altra piattaforma Android
utilizza questi suggerimenti per il tempo di rete.
Dopo aver ricevuto suggerimenti dall'origine dell'ora della rete, time_detector
servizio determina se aggiornare l'orologio di sistema in base
le regole di assegnazione delle priorità configurate.
Per configurare il sistema di rilevamento automatico dell'ora in modo che utilizzi l'origine della rete
per impostare automaticamente l'orologio di sistema, utilizza
File di configurazione del server di sistema core/res/res/values/config.xml
. Assicurati che
il valore network
è contenuto in config_autoTimeSourcesPriority
nel
posizione. Per maggiori dettagli, vedi
Priorità dell'origine ora.
Configurazione dispositivo
Questa sezione descrive in che modo i produttori di dispositivi possono configurare la rete di rilevamento dell'ora.
La configurazione AOSP di base è
frameworks/base/core/res/res/values/config.xml
:
Chiave di configurazione | Valore AOSP | Descrizione |
---|---|---|
config_ntpRetry |
3 |
Se il sistema non riesce ad aggiornare, questo è il numero di volte
polling del tempo di rete con un intervallo di polling NTP più breve
(config_ntpPollingIntervalShorter ), prima di eseguire il backup e utilizzare
l'intervallo di polling normale (config_ntpPollingInterval ). Un valore
meno di 0 indica che il sistema riesegue il polling all'NTP più breve
per l'intervallo di polling finché l'aggiornamento non riesce. |
config_ntpPollingInterval |
64800000 (18 ore) |
Il normale intervallo di polling del tempo di rete in millisecondi. |
config_ntpPollingIntervalShorter |
60000 (1 minuto) |
L'intervallo di polling dei nuovi tentativi in millisecondi durante la rete. Utilizzata quando quando l'aggiornamento non riesce. |
config_ntpServers |
Una singola voce: ntp://time.android.com |
server NTP da utilizzare per ottenere l'ora esatta. Gli elementi devono avere il seguente formato:
ntp://<host>[:port] .
Questo non è uno schema URI IANA registrato. |
config_ntpTimeout |
5000 | Tempo di attesa di una risposta del server NTP in millisecondi prima del timeout. |
Server
Per impostazione predefinita, AOSP utilizza i server temporali all'indirizzo time.android.com
, che è un alias per
Google Public NTP. Questo servizio ha
senza SLA. Per maggiori dettagli, consulta
Domande frequenti su Google Public NTP.
Supporto di più server
Per Android 14 e versioni successive, il framework supporta
più server NTP. Questo supporta le situazioni in cui i dispositivi vengono
distribuiti a livello globale con un'unica configurazione, ma dove l'accesso
come time.android.com
, è soggetta a limitazioni in alcune località.
L'algoritmo prova ogni server specificato nell'config_ntpServers
chiave di configurazione. Quando ne trova una che risponde, il sistema continua a usare
il server finché l'aggiornamento non riesce o il dispositivo non si riavvia.
Accuratezza
La sincronizzazione ora di rete predefinita di Android utilizza SNTP con una singola query temporale circa una volta al giorno per fare in modo che il segnale sia sempre recente.
Gli effetti della latenza di rete sono il fattore principale che contribuisce all'inesattezza dei tempi con Implementazione di SNTP di Android. SNTP presuppone ritardi di rete simmetrici, ovvero la latenza di rete per la richiesta è la stessa della latenza di rete per e il momento giusto si trova esattamente nel mezzo. di round trip della rete. Spesso, il tempo di round trip della rete è nell'ordine di alcuni centinaia di millisecondi e su una rete cablata la latenza è vicina a simmetrico, portando a livelli di imprecisione quasi impercettibili utenti. Tuttavia, nel caso della telefonia mobile o radio, esistono diverse fasi in cui relativamente lunghi, ritardi asimmetrici possono essere inseriti in una transazione di rete il che porta a maggiori inesattezze.
Con l'impostazione predefinita di AOSP per config_ntpTimeout
impostata su 5000
millisecondi,
e se tutta la latenza di rete è concentrata esclusivamente sulla latenza in entrata o in uscita
gamba, l'errore teorico massimo è di circa 2,5 secondi.
La precisione complessiva dell'orologio di sistema dipende anche dalla capacità del dispositivo Android
per tenere traccia del tempo trascorso in modo preciso dopo aver ottenuto un indicatore di tempo. Si tratta di un
preoccuparsi di tutti i servizi di cronometraggio su Android, non solo del rilevamento del tempo di rete,
perché il servizio time_detector
ignora i suggerimenti precedenti. La
Il servizio network_time_update_service
viene aggiornato regolarmente utilizzando il
Intervallo di config_ntpPollingInterval
per mantenere il servizio time_detector
forniti con nuovi suggerimenti di orario e per garantire che time_detector
non torna a una priorità inferiore e spesso a un'accuratezza
a volte origini temporali errate, come telephony
.
Quando viene utilizzato il rilevamento automatico dell'ora, la precisione dell'orologio di sistema del dispositivo può essere
interessata da altre configurazioni del servizio time_detector
, ad esempio
costanti e flag che determinano la differenza tra un suggerimento di orario e l'altro
l'ora corrente dell'orologio di sistema prima della regolazione dell'orologio
(ServiceConfigAccessorImpl.java
).
I produttori di dispositivi possono modificare l'accuratezza utilizzando la configurazione precedente le opzioni e le costanti. Ma è importante conoscere i limiti delle dell'implementazione SNTP della piattaforma e il potenziale impatto sul consumo energetico da operazioni di rete più frequenti, impatto sulle app in esecuzione sul dispositivo più frequenti ma più piccole, e l'effetto sul carico del server.
Altri utilizzi del tempo di rete
Se il rilevamento automatico dell'ora utilizzando l'origine network
non è configurato o se
l'utente ha disattivato il rilevamento automatico dell'ora, l'orario ottenuto
Il servizio network_time_update_service
è ancora utilizzato dai seguenti componenti:
- La
SystemClock.currentNetworkTimeClock()
. - Funzioni di piattaforma interne. Ad esempio, l'A-GPS può individuare una posizione GNSS la prima correzione più rapida se sono disponibili informazioni sull'ora della rete.
Debug e test
La sezione seguente descrive i comandi shell per il debug e il test del rilevamento del tempo di rete.
Interagire con il servizio network_time_update_service
Per eseguire il dump dello stato attuale di network_time_update_service
, usa:
adb shell cmd network_time_update_service dump
Per visualizzare un insieme di opzioni della riga di comando che possono essere utili durante i test, utilizza:
adb shell cmd network_time_update_service help