Urządzenia z Androidem automatycznie próbują uzyskać prawidłowy czas uniksowy z okresu do źródła sieciowego. Android używa protokołu SNTP, który używa protokołu UDP, w celu uzyskania informacji o czasie.
Komponenty opisane na tej stronie są częścią automatycznego wykrywania czasu
określa się go jako źródło czasu sieci. Sygnał czasowy od
Sieciowy serwer czasu może służyć do ustawiania zegara systemowego urządzenia z Androidem, gdy
urządzenie i time_detector
obsługują automatyczne wykrywanie czasu
jest skonfigurowana tak, aby z niej korzystać.
Domyślnie Android używa źródła czasu sieci jako głównego źródło automatycznego wykrywania czasu.
System wykrywania czasu sieci
Usługa network_time_update_service
działająca na serwerze systemu Android
implementuje system wykrywania czasu sieci. Usługa okresowo używa
SNTP, aby uzyskać sygnał czasowy z serwera. Usługa monitoruje również sieć
połączenia i powoduje odświeżenie czasu, gdy brak jest sygnału ostatniej godziny
po dłuższym okresie słabego połączenia.
Usługa network_time_update_service
próbuje uzyskać sygnał czasu
po uruchomieniu i pierwszym nawiązaniu połączenia sieciowego.
próbuje następnie utrzymać najnowszy sygnał, który przechowuje. Równoważy się
dostosowane do potrzeb poszczególnych urządzeń z Androidem przy dużym obciążeniu, które można
generowanych przez wiele urządzeń z Androidem na całym świecie.
Za pomocą wewnętrznych interfejsów API network_time_update_service
przesyła czas pracy sieci
sugestie do usługi time_detector
. Inna platforma Androida
a następnie korzystają z tych sugestii.
Po otrzymaniu sugestii ze źródła czasu sieci time_detector
decyduje, czy zaktualizować zegar systemowy zgodnie z
skonfigurowane reguły ustalania priorytetów.
Aby skonfigurować system automatycznego wykrywania czasu tak, aby używał punktu początkowego sieci
sugestii automatycznego ustawienia zegara systemowego, użyj
Plik konfiguracji serwera systemowego core/res/res/values/config.xml
. Upewnij się, że parametr
wartość network
znajduje się w config_autoTimeSourcesPriority
w żądanym
pozycji. Więcej informacji:
Priorytet źródła czasu.
Konfiguracja urządzenia
Ta sekcja zawiera informacje o tym, jak producenci urządzeń mogą skonfigurować sieć w systemie wykrywania czasu.
Podstawowa konfiguracja AOSP jest na
frameworks/base/core/res/res/values/config.xml
:
Klucz konfiguracji | Wartość AOSP | Opis |
---|---|---|
config_ntpRetry |
3 |
Jeśli nie uda się odświeżyć, jest to liczba prób podejmowanych przez system
odpytywanie w czasie sieci z krótszym interwałem odpytywania NTP
(config_ntpPollingIntervalShorter ), zanim wycofasz kopię zapasową i zaczniesz używać
normalny interwał sondowania (config_ntpPollingInterval ). Wartość A
mniejsza niż 0 oznacza, że system ponawia próbę odpytywania na krótszym NTP
interwał sondowania, dopóki nie uda się go odświeżyć. |
config_ntpPollingInterval |
64800000 (18 godzin) |
Normalny interwał odpytywania w czasie sieci (w milisekundach). |
config_ntpPollingIntervalShorter |
60000 (1 minuta) |
Interwał sondowania w czasie ponawiania próby sieci w milisekundach. Używana, gdy nie można odświeżyć w czasie. |
config_ntpServers |
Pojedynczy wpis: ntp://time.android.com |
Serwery NTP używane do uzyskania dokładnego czasu. Elementy muszą mieć następujący format:
ntp://<host>[:port]
To nie jest zarejestrowany schemat URI IANA. |
config_ntpTimeout |
5000 | Czas oczekiwania na odpowiedź serwera NTP (w milisekundach) przed upływem limitu czasu. |
Serwery
Domyślnie AOSP używa serwerów czasu pod adresem time.android.com
, który jest aliasem dla
Publiczny NTP Google. Ta usługa ma
brak gwarancji jakości usług. Więcej informacji:
Najczęstsze pytania na temat publicznego NTP Google.
Obsługa wielu serwerów
W przypadku Androida 14 i nowszych platforma obsługuje
na wielu serwerach NTP. Dotyczy to sytuacji, w których urządzenia
rozprowadzane globalnie w jednej konfiguracji, lecz gdzie dostęp do serwerów
takich jak time.android.com
, gdzie w niektórych miejscach dostęp jest ograniczony.
Algorytm próbuje używać każdego serwera określonego w zasadzie config_ntpServers
.
klucz konfiguracyjny. Po wykryciu, że system zareaguje, będzie dalej używać
do momentu odświeżenia lub ponownego uruchomienia urządzenia.
Dokładność
Domyślna synchronizacja czasu sieci na Androidzie używa protokołu SNTP z pojedynczym zapytaniem mniej więcej raz dziennie, by mieć pewność, że telefon ma zawsze aktualny sygnał czasu.
Efekty opóźnienia w sieci są najważniejszą przyczyną niedokładności czasu Implementacja protokołu SNTP na Androidzie. SNTP zakłada symetryczne opóźnienia sieci, czyli opóźnienie sieciowe dla żądania jest takie samo jak opóźnienie sieci dla żądań a właściwy czas przypada dokładnie w środku tej w obie strony. Czas przesyłania danych w obie strony sieci jest często rzędu kilku ok. 100 milisekund, a w sieci przewodowej opóźnienie jest zbliżone do są symetryczne, co prowadzi do poziomów niedokładności, które są niemal niezauważalne dla użytkowników. Jednak w przypadku telefonii komórkowej lub radiowej istnieje kilka etapów, w transakcjach sieciowych mogą występować stosunkowo duże opóźnienia asymetryczne co prowadzi do większej niedokładności.
Jeśli domyślne ustawienie AOSP w systemie config_ntpTimeout
ma wartość 5000
milisekund,
i jeśli wszystkie opóźnienia sieciowe są skupione wyłącznie na ruchu przychodzącym lub wychodzącym.
nogi, maksymalny błąd teoretyczny wynosi około 2,5 sekundy.
Na ogólną dokładność zegara systemowego wpływa również zdolność urządzenia z Androidem
pozwala dokładnie śledzić czas, który upłynął od uzyskania sygnału czasowego. To jest
martwi się rejestrowaniem czasu w Androidzie, nie tylko wykrywaniem czasu sieci.
Dlaczego usługa time_detector
ignoruje stare sugestie.
Usługa network_time_update_service
jest regularnie odświeżana za pomocą
Interwał config_ntpPollingInterval
umożliwiający zachowanie usługi time_detector
z sugestiami na temat aktualnego terminu i upewnij się, że time_detector
nie przechodzi na niższy priorytet i często ma niższą dokładność lub
czasami nieprawidłowe źródła czasu, takie jak telephony
.
Jeśli jest używane automatyczne wykrywanie czasu, dokładność zegara systemowego urządzenia może być
na które mają wpływ inne konfiguracje usługi time_detector
, takie jak
stałe i flagi, które wpływają na to, jak różna musi być sugestia czasu
aktualne ustawienie zegara systemowego przed skorygowaniem zegara
(ServiceConfigAccessorImpl.java
).
Producenci urządzeń mogą zmienić dokładność przy użyciu poprzedniej konfiguracji opcje i stałe. Warto jednak pamiętać o ograniczeniach wdrożenie protokołu SNTP na platformie oraz potencjalny wpływ na zużycie energii częstsze operacje sieciowe, może to mieć wpływ na aplikacje uruchomione na urządzeniu częstsze, ale mniejsze regulacje zegara i wpływ na obciążenie serwera.
Inne zastosowania czasu sieciowego
Jeśli automatyczne wykrywanie czasu przy użyciu punktu początkowego network
nie zostało skonfigurowane lub jeśli
użytkownik wyłączył automatyczne wykrywanie czasu, czyli czas uzyskany przez
Z usługi network_time_update_service
nadal mogą korzystać te komponenty:
-
SystemClock.currentNetworkTimeClock()
. - Funkcje platformy wewnętrznej. Na przykład A-GPS może zlokalizować GNSS (lokalizację). można je rozwiązać szybciej, gdy dostępne są informacje o czasie działania sieci.
Debugowanie i testowanie
W tej sekcji opisano polecenia powłoki służące do debugowania i testowania Wykrywanie czasu korzystania z sieci.
Interakcja z usługą network_time_update_service
Aby skopiować bieżący stan instancji network_time_update_service
, użyj polecenia:
adb shell cmd network_time_update_service dump
Aby zobaczyć zestaw opcji wiersza poleceń, które mogą pomóc w testowaniu, użyj:
adb shell cmd network_time_update_service help