Android-Geräte versuchen automatisch, die korrekte Unix-Epochen-Zeit von eine Netzwerkquelle. Android nutzt das SNTP-Protokoll, das das UDP-Protokoll nutzt, Zeitinformationen zu erhalten.
Die auf dieser Seite beschriebenen Komponenten sind Teil der automatischen Zeiterkennung
System, auch als Ursprung im Netzwerk bezeichnet. Ein Zeitsignal von
kann ein Netzwerkzeitserver verwendet werden, um die Systemuhr des Android-Geräts einzustellen, wenn
Die automatische Zeiterkennung wird auf dem Gerät und der time_detector
unterstützt
ist für dessen Verwendung konfiguriert.
Standardmäßig verwendet Android den Ursprung des Netzwerks als primären Ursprung Ursprung der automatischen Zeiterkennung.
System zur Netzwerkzeiterkennung
Der Dienst network_time_update_service
, der auf dem Android-Systemserver ausgeführt wird
Implementiert das System zur Netzwerkzeiterkennung. Der Dienst verwendet regelmäßig
SNTP, um ein Zeitsignal von einem Server abzurufen. Der Dienst überwacht auch das Netzwerk
Verbindung und löst eine Zeitaktualisierung aus, wenn kein aktuelles Zeitsignal verfügbar ist
auch wenn die Verbindung schlecht war.
Der Dienst network_time_update_service
versucht, ein Zeitsignal abzurufen
nach dem Booten und beim ersten Herstellen der Netzwerkverbindung. Die
und versucht dann,
das neueste Signal auf dem neuesten Stand zu halten. Es sorgt für einen ausgewogenen
der Android-Geräte mit der erheblichen Belastung, die
die von vielen Android-Geräten weltweit generiert wurden.
network_time_update_service
sendet über interne APIs die Netzwerkzeit
Vorschläge für den time_detector
-Dienst. Andere Android-Plattform
verwenden diese Netzwerkzeitvorschläge.
Nach Erhalt von Vorschlägen vom Ursprung des Netzwerks, time_detector
bestimmt, ob die Systemuhr entsprechend dem
konfigurierten Priorisierungsregeln.
So konfigurieren Sie das automatische Zeiterkennungssystem für die Verwendung des Netzwerkursprungs
zum automatischen Einstellen der Systemuhr verwenden, verwenden Sie
Systemserver-Konfigurationsdatei core/res/res/values/config.xml
. Stellen Sie sicher, dass die
Der Wert network
ist in der Spalte config_autoTimeSourcesPriority
enthalten:
. Weitere Informationen finden Sie unter
Priorität der Zeitquelle.
Gerätekonfiguration
In diesem Abschnitt wird beschrieben, wie Gerätehersteller das Netzwerk konfigurieren können Zeiterkennungssystems.
Die AOSP-Basiskonfiguration befindet sich
frameworks/base/core/res/res/values/config.xml
:
Konfigurationsschlüssel | AOSP-Wert | Beschreibung |
---|---|---|
config_ntpRetry |
3 |
Wenn die Aktualisierung fehlschlägt, gibt dies an, wie oft das System versucht,
Netzwerkzeit-Polling mit einem kürzeren NTP-Pollingintervall
(config_ntpPollingIntervalShorter ), bevor die Daten zurückgesetzt und verwendet werden
das normale Pollingintervall (config_ntpPollingInterval ). Ein Wert
weniger als 0 bedeutet, dass das System den Abruf mit dem kürzeren NTP wiederholt
Pollingintervall, bis er aktualisiert werden kann. |
config_ntpPollingInterval |
64800000 (18 Stunden) |
Das normale Netzwerkzeit-Pollingintervall in Millisekunden. |
config_ntpPollingIntervalShorter |
60000 (1 Minute) |
Das Zeitintervall für die Netzwerkwiederholung in Millisekunden. Wird verwendet, wenn eine zeitbedingte Aktualisierung fehlschlägt. |
config_ntpServers |
Ein einzelner Eintrag: ntp://time.android.com |
NTP-Server, die zur Ermittlung einer genauen Zeit verwendet werden sollen. Elemente müssen das folgende Format haben:
ntp://<host>[:port]
Dies ist kein registriertes IANA-URI-Schema. <ph type="x-smartling-placeholder"> |
config_ntpTimeout |
5.000 | Zeit in Millisekunden, die auf eine NTP-Serverantwort gewartet wird, bevor das Zeitlimit überschritten wird. |
Server
Standardmäßig verwendet AOSP Zeitserver unter time.android.com
, einem Alias für
Google Public NTP. Dieser Dienst hat
kein SLA. Weitere Informationen finden Sie in der
Häufig gestellte Fragen zu Google Public NTP
Unterstützung mehrerer Server
Ab Android 14 unterstützt das Framework
auf mehreren NTP-Servern. Dies ist hilfreich, wenn Geräte
die global verteilt sind, mit einer einzigen Konfiguration,
aber mit Zugriff auf Server
wie time.android.com
ist an bestimmten Orten eingeschränkt.
Der Algorithmus versucht jeden Server, der in config_ntpServers
angegeben ist.
Konfigurationsschlüssel. Findet es eine Antwort, verwendet das System
bis er nicht aktualisiert wird oder das Gerät neu startet.
Genauigkeit
Die standardmäßige Netzwerkzeitsynchronisierung von Android verwendet SNTP mit einer einzigen Zeitabfrage um sicherzustellen, dass immer ein aktuelles Zeitsignal verfügbar ist.
Netzwerklatenzeffekte tragen am stärksten zur Zeitungenauigkeit bei SNTP-Implementierung von Android SNTP geht von symmetrischen Netzwerkverzögerungen aus, ist die Netzwerklatenz für die Anfrage identisch mit der Netzwerklatenz für die und die richtige Zeit liegt genau in der Mitte Netzwerk-Roundtrips. Häufig liegt die Netzwerk-Umlaufzeit in der Größenordnung von und in einem kabelgebundenen Netzwerk liegt die Latenz bei was zu Ungenauigkeiten führt, die für Nutzenden. Bei Mobilfunk- und Funktelefonen gibt es jedoch mehrere Phasen, in denen Relativ lange, asymmetrische Verzögerungen können in eine Netzwerktransaktion eingefügt werden. was zu Ungenauigkeiten führt.
Wenn die AOSP-Standardeinstellung für config_ntpTimeout
auf 5000
Millisekunden festgelegt ist,
Bezieht sich die gesamte Netzwerklatenz ausschließlich auf den eingehenden oder ausgehenden Traffic,
liegt der maximale theoretische Fehler bei etwa 2, 5 Sekunden.
Auch die Genauigkeit der Systemuhr insgesamt wird durch die
um die verstrichene Zeit genau zu verfolgen, nachdem ein Zeitsignal empfangen wurde. Dies ist ein
die gesamte Zeitmessung unter Android betreffen, nicht nur die Netzwerkzeiterkennung.
warum der Dienst time_detector
alte Zeitvorschläge ignoriert. Die
Der network_time_update_service
-Dienst wird regelmäßig mit dem
config_ntpPollingInterval
-Intervall, um den time_detector
-Dienst beizubehalten
aktuelle Uhrzeitvorschläge erhalten und sicherstellen, dass time_detector
nicht auf eine niedrigere Priorität und oft
Gelegentlich falsche Zeitursprünge wie telephony
.
Bei Verwendung der automatischen Zeiterkennung kann die Genauigkeit der Systemuhr des Geräts
die von anderen Konfigurationen des time_detector
-Dienstes betroffen sind, z. B. dem
Konstanten und Markierungen, die beeinflussen, wie
sich ein Zeitvorschlag von dem
die aktuelle Systemuhrzeit vor dem Anpassen der Uhr
(ServiceConfigAccessorImpl.java
)
Gerätehersteller können die Genauigkeit mithilfe der vorherigen Konfiguration ändern Optionen und Konstanten. Es ist jedoch wichtig, sich der Einschränkungen des der SNTP-Implementierung der Plattform und die möglichen Auswirkungen auf den Stromverbrauch von häufigeren Netzwerkvorgängen und Auswirkungen auf Apps, die auf dem Gerät ausgeführt werden, häufigere, aber kleinere Uhranpassungen und die Auswirkungen auf die Serverauslastung.
Andere Verwendungen der Netzwerkzeit
Wenn die automatische Zeiterkennung mit dem Ursprung network
nicht konfiguriert ist oder wenn
der Nutzer die automatische Zeiterkennung deaktiviert hat, d. h. die vom
Der Dienst network_time_update_service
wird weiterhin von den folgenden Komponenten verwendet:
- Die
SystemClock.currentNetworkTimeClock()
. - Interne Plattformfunktionen. A-GPS kann beispielsweise einen GNSS (Standort) wenn dort Informationen zur Netzwerkzeit verfügbar sind.
Fehlerbehebung und Tests
Im folgenden Abschnitt werden Shell-Befehle zum Debugging und Testen der Funktion zur Erkennung der Netzwerkzeit.
Mit dem Dienst network_time_update_service interagieren
Verwenden Sie folgenden Befehl, um den aktuellen Status von network_time_update_service
zu sichern:
adb shell cmd network_time_update_service dump
Um eine Reihe von Befehlszeilenoptionen anzuzeigen, die beim Testen helfen können, verwenden Sie:
adb shell cmd network_time_update_service help