Устройства Android автоматически пытаются получить правильное время эпохи Unix из сетевого источника. Android использует протокол SNTP, который использует протокол UDP, для получения информации о времени.
Компоненты, описанные на этой странице, являются частью системы автоматического определения времени, называемой источником сетевого времени . Сигнал времени с сетевого сервера времени можно использовать для установки системных часов устройства Android, если на устройстве поддерживается автоматическое определение времени и служба time_detector
настроена на его использование.
По умолчанию Android использует источник сетевого времени в качестве основного источника автоматического определения времени.
Система определения сетевого времени
Служба network_time_update_service
, работающая на системном сервере Android, реализует систему определения сетевого времени. Служба периодически использует SNTP для получения сигнала времени с сервера. Служба также контролирует сетевое подключение и запускает обновление времени, когда последний сигнал времени недоступен после длительных периодов плохого подключения.
Служба network_time_update_service
пытается получить сигнал времени после загрузки и при первом установлении сетевого подключения. Затем служба пытается сохранить последний имеющийся у нее сигнал в актуальном состоянии. Он уравновешивает потребности отдельных устройств Android со значительной нагрузкой, которую могут создавать многие устройства Android по всему миру, освежающие свое время.
Используя внутренние API, network_time_update_service
отправляет предложения по сетевому времени в службу time_detector
. Другие компоненты платформы Android затем используют эти предложения по времени в сети.
After receiving suggestions from the network time origin, the time_detector
service determines whether to update the system clock according to the configured prioritization rules .
Чтобы настроить систему автоматического определения времени на использование предложений сетевого происхождения для автоматической установки системных часов, используйте файл конфигурации системного сервера core/res/res/values/config.xml
. Убедитесь, что network
создания ценности содержится в config_autoTimeSourcesPriority
в нужной позиции. Подробности см. в разделе «Приоритет источника времени» .
Конфигурация устройства
В этом разделе описывается, как производители устройств могут настроить систему определения времени сети.
Базовая конфигурация AOSP находится в frameworks/base/core/res/res/values/config.xml
:
Конфигурационный ключ | Значение AOSP | Описание |
---|---|---|
config_ntpRetry | 3 | After failing to refresh, this is the number of times the system tries network time polling with a shorter NTP polling interval ( config_ntpPollingIntervalShorter ), before backing off and using the normal polling interval ( config_ntpPollingInterval ). Значение меньше 0 означает, что система повторяет опрос с более коротким интервалом опроса NTP, пока не сможет успешно обновиться. |
config_ntpPollingInterval | 64800000 (18 часов) | Обычный интервал опроса времени сети в миллисекундах. |
config_ntpPollingIntervalShorter | 60000 (1 минута) | Интервал повторного опроса сети в миллисекундах. Используется в случае сбоя обновления времени. |
config_ntpServers | Одна запись: ntp://time.android.com | NTP-серверы, используемые для получения точного времени. Элементы должны быть в формате: ntp://<host>[:port] .Это не зарегистрированная схема URI IANA. |
config_ntpTimeout | 5000 | Время ожидания ответа NTP-сервера в миллисекундах до истечения времени ожидания. |
Серверы
По умолчанию AOSP использует серверы времени по адресу time.android.com
, который является псевдонимом Google Public NTP . У этой услуги нет соглашения об уровне обслуживания. Подробности см. в FAQ по публичному NTP Google .
Поддержка нескольких серверов
Для Android 14 и более поздних версий платформа поддерживает несколько серверов NTP. This supports situations where devices are distributed globally with a single configuration, but where access to servers such as time.android.com
is restricted in certain places.
Алгоритм проверяет каждый сервер, указанный в конфигурационном ключе config_ntpServers
. Когда он находит тот, который отвечает, система продолжает использовать этот сервер до тех пор, пока он не перестанет обновляться или устройство не перезагрузится.
Точность
Сетевая синхронизация времени в Android по умолчанию использует SNTP с одним запросом времени примерно раз в день, чтобы обеспечить всегда наличие актуального сигнала времени.
Эффекты задержки в сети вносят наибольший вклад в неточность времени при реализации SNTP в Android. SNTP предполагает симметричные сетевые задержки, то есть задержка в сети для запроса такая же, как задержка в сети для ответа, а правильное время находится точно в середине этого обратного прохождения по сети. Часто время прохождения сигнала туда и обратно составляет порядка нескольких сотен миллисекунд, а в проводной сети задержка близка к симметричной, что приводит к уровням неточностей, которые практически незаметны для пользователей. Однако в случае мобильной или радиотелефонии существует несколько этапов, на которых в сетевую транзакцию могут быть включены относительно длительные асимметричные задержки, что приводит к большей неточности.
Если для параметра AOSP по умолчанию для config_ntpTimeout
установлено значение 5000
миллисекунд, и если вся задержка сети сосредоточена исключительно на входящем или исходящем участке, максимальная теоретическая ошибка составляет примерно 2,5 секунды.
На общую точность системных часов также влияет способность устройства Android точно отслеживать прошедшее время после получения сигнала времени. This is a concern with all timekeeping on Android, not just network time detection, and is why the time_detector
service disregards old time suggestions. Служба 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
Устройства Android автоматически пытаются получить правильное время эпохи Unix из сетевого источника. Android использует протокол SNTP, который использует протокол UDP, для получения информации о времени.
Компоненты, описанные на этой странице, являются частью системы автоматического определения времени, называемой источником сетевого времени . Сигнал времени с сетевого сервера времени можно использовать для установки системных часов устройства Android, если на устройстве поддерживается автоматическое определение времени и служба time_detector
настроена на его использование.
По умолчанию Android использует источник сетевого времени в качестве основного источника автоматического определения времени.
Система определения сетевого времени
Служба network_time_update_service
, работающая на системном сервере Android, реализует систему определения сетевого времени. Служба периодически использует SNTP для получения сигнала времени с сервера. Служба также контролирует сетевое подключение и запускает обновление времени, когда последний сигнал времени недоступен после длительных периодов плохого подключения.
Служба network_time_update_service
пытается получить сигнал времени после загрузки и при первом установлении сетевого подключения. Затем служба пытается сохранить последний имеющийся у нее сигнал в актуальном состоянии. Он уравновешивает потребности отдельных устройств Android со значительной нагрузкой, которую могут создавать многие устройства Android по всему миру, освежающие свое время.
Используя внутренние API, network_time_update_service
отправляет предложения по сетевому времени в службу time_detector
. Другие компоненты платформы Android затем используют эти предложения по времени в сети.
После получения предложений от источника сетевого времени сервис time_detector
определяет, следует ли обновлять системные часы в соответствии с настроенными правилами расстановки приоритетов .
Чтобы настроить систему автоматического определения времени на использование предложений сетевого происхождения для автоматической установки системных часов, используйте файл конфигурации системного сервера core/res/res/values/config.xml
. Убедитесь, что network
создания ценности содержится в config_autoTimeSourcesPriority
в нужной позиции. Подробности см. в разделе «Приоритет источника времени» .
Конфигурация устройства
В этом разделе описывается, как производители устройств могут настроить систему определения времени сети.
The base AOSP configuration is at frameworks/base/core/res/res/values/config.xml
:
Конфигурационный ключ | Значение AOSP | Описание |
---|---|---|
config_ntpRetry | 3 | После неудачного обновления это количество раз, которое система пытается выполнить опрос сетевого времени с более коротким интервалом опроса NTP ( config_ntpPollingIntervalShorter ), прежде чем отступить и использовать обычный интервал опроса ( config_ntpPollingInterval ). Значение меньше 0 означает, что система повторяет опрос с более коротким интервалом опроса NTP, пока не сможет успешно обновиться. |
config_ntpPollingInterval | 64800000 (18 часов) | Обычный интервал опроса времени сети в миллисекундах. |
config_ntpPollingIntervalShorter | 60000 (1 минута) | Интервал повторного опроса сети в миллисекундах. Используется в случае сбоя обновления времени. |
config_ntpServers | A single entry: ntp://time.android.com | NTP-серверы, используемые для получения точного времени. Элементы должны быть в формате: ntp://<host>[:port] .Это не зарегистрированная схема URI IANA. |
config_ntpTimeout | 5000 | Время ожидания ответа NTP-сервера в миллисекундах до истечения времени ожидания. |
Серверы
По умолчанию AOSP использует серверы времени по адресу time.android.com
, который является псевдонимом Google Public NTP . У этой услуги нет соглашения об уровне обслуживания. For details, see the Google Public NTP FAQ .
Поддержка нескольких серверов
Для Android 14 и более поздних версий платформа поддерживает несколько серверов NTP. Это поддерживает ситуации, когда устройства распределены по всему миру с одной конфигурацией, но доступ к таким серверам, как time.android.com
ограничен в определенных местах.
Алгоритм проверяет каждый сервер, указанный в конфигурационном ключе config_ntpServers
. Когда он находит тот, который отвечает, система продолжает использовать этот сервер до тех пор, пока он не перестанет обновляться или устройство не перезагрузится.
Точность
Сетевая синхронизация времени в Android по умолчанию использует SNTP с одним запросом времени примерно раз в день, чтобы обеспечить всегда наличие актуального сигнала времени.
Эффекты задержки в сети вносят наибольший вклад в неточность времени при реализации SNTP в Android. SNTP предполагает симметричные сетевые задержки, то есть задержка в сети для запроса такая же, как задержка в сети для ответа, а правильное время находится точно в середине этого обратного прохождения по сети. Часто время прохождения сигнала туда и обратно составляет порядка нескольких сотен миллисекунд, а в проводной сети задержка близка к симметричной, что приводит к уровням неточностей, которые практически незаметны для пользователей. Однако в случае мобильной или радиотелефонии существует несколько этапов, на которых в сетевую транзакцию могут вноситься относительно длительные асимметричные задержки, что приводит к большей неточности.
With the AOSP default setting for config_ntpTimeout
set to 5000
milliseconds, and if all network latency is solely concentrated on the inbound or outbound leg, the maximum theoretical error is approximately 2.5 seconds.
На общую точность системных часов также влияет способность устройства Android точно отслеживать прошедшее время после получения сигнала времени. Это проблема всех хронометража на Android, а не только определения времени в сети, и именно поэтому служба time_detector
игнорирует предложения старого времени. The network_time_update_service
service refreshes regularly using the config_ntpPollingInterval
interval to keep the time_detector
service supplied with fresh time suggestions and to ensure that the time_detector
service doesn't fall back to lower-priority and often lower-accuracy or occasionally incorrect time origins such as telephony
.
When automatic time detection is used, device system clock accuracy can be affected by other configurations of the time_detector
service, such as the constants and flags that affect how different a time suggestion has to be from the current system clock time before the clock is adjusted ( 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