Los dispositivos Android intentan obtener automáticamente el tiempo Unix correcto del tiempo Unix una fuente de red. Android usa el protocolo SNTP, que usa el protocolo UDP, para obtener información sobre el tiempo.
Los componentes descritos en esta página forman parte de la detección automática de hora
al que se hace referencia como origen de hora de la red. Una señal de tiempo de
se puede utilizar un servidor de hora de red para configurar el reloj del sistema del dispositivo Android cuando
La detección automática de la hora es compatible con el dispositivo y time_detector
el servicio está configurado para usarlo.
De forma predeterminada, Android usa el origen de tiempo de red como principal el origen de detección automática de la hora.
Sistema de detección de la hora de la red
El servicio network_time_update_service
que se ejecuta en el servidor del sistema Android
implementa el sistema de detección
de la hora de la red. El servicio usa periódicamente
SNTP para obtener una señal de hora de un servidor. El servicio también supervisa la configuración
conectividad y activa una actualización de tiempo cuando no hay una señal reciente disponible
después de largos períodos
de conectividad deficiente.
El servicio network_time_update_service
intenta obtener una señal de hora
después del inicio y cuando se establece la conectividad de red. El
el servicio intenta mantener actualizada
la señal más reciente. Equilibra la
necesidades de los dispositivos Android individuales con la carga sustancial que podrían
generados por muchos dispositivos Android de todo el mundo, que actualizan su tiempo.
Con las APIs internas, network_time_update_service
envía la hora de red
sugerencias al servicio time_detector
. Otra plataforma de Android
usan estas sugerencias de hora de red.
Después de recibir sugerencias del origen de hora de la red, el time_detector
determina si debe actualizar el reloj del sistema según la
las reglas de priorización configuradas.
Para configurar el sistema de detección automática de la hora de modo que use el origen de la red
para configurar el reloj del sistema automáticamente, usa el
Archivo de configuración del servidor del sistema core/res/res/values/config.xml
. Asegúrate de que las
el valor network
se encuentra en config_autoTimeSourcesPriority
en la
posición. Para obtener más información, consulta
Prioridad de la fuente de tiempo.
Configuración del dispositivo
En esta sección, se describe cómo los fabricantes de dispositivos pueden configurar la red de detección de tiempo.
La configuración básica del AOSP se encuentra
frameworks/base/core/res/res/values/config.xml
:
Clave de configuración | Valor de AOSP | Descripción |
---|---|---|
config_ntpRetry |
3 |
Después de un error de actualización, esta es la cantidad de veces que el sistema intenta
sondeo en la hora de la red con un intervalo de sondeo NTP más corto
(config_ntpPollingIntervalShorter ), antes de retroceder y usar
el intervalo de sondeo normal (config_ntpPollingInterval ). Un valor
inferior a 0 significa que el sistema vuelve a realizar el sondeo al NTP más corto
el intervalo de sondeo hasta que
se pueda actualizar correctamente. |
config_ntpPollingInterval |
64800000 (18 horas) |
El intervalo de sondeo del tiempo de red normal en milisegundos. |
config_ntpPollingIntervalShorter |
60000 (1 minuto) |
El intervalo de sondeo del tiempo de red de reintento en milisegundos. Se usa cuando falla una actualización de tiempo. |
config_ntpServers |
Una sola entrada: ntp://time.android.com |
Servidores NTP que se deben usar para obtener una hora precisa. Los elementos deben tener el siguiente formato:
ntp://<host>[:port]
Este no es un esquema de URI de IANA registrado. |
config_ntpTimeout |
5000 | Tiempo para esperar una respuesta del servidor NTP en milisegundos antes del tiempo de espera. |
Servidores
De forma predeterminada, AOSP usa servidores de tiempo en time.android.com
, que es un alias para
NTP pública de Google. Este servicio tiene
sin ANS. Para obtener más información, consulta la
Preguntas frecuentes sobre NTP públicas de Google.
Compatibilidad con varios servidores
Para Android 14 y versiones posteriores, el framework admite
varios servidores NTP. Esto es compatible con situaciones en las que los dispositivos
distribuidos globalmente con una sola configuración, pero en los que el acceso a los
como time.android.com
, está restringido en ciertos lugares.
El algoritmo prueba con cada servidor especificado en el archivo config_ntpServers
.
de configuración de Terraform. Cuando encuentra uno que responde, el sistema sigue usando
ese servidor hasta que no se actualice o el dispositivo se reinicie.
Exactitud
La sincronización de hora de red predeterminada de Android utiliza SNTP con una única consulta de tiempo. aproximadamente una vez al día para asegurarse de tener una señal de hora reciente.
Los efectos de la latencia de red son el factor que más contribuye a la falta de exactitud en el tiempo, con Implementación de SNTP de Android SNTP asume retrasos simétricos de la red, es decir, la latencia de red para la solicitud es la misma que la latencia de la red respuesta y el momento correcto está justo en medio de esa ida y vuelta de la red. A menudo, el tiempo de ida y vuelta de la red está en el orden milésimas de segundo y, en una red por cable, la latencia es cercana a simétrica, lo que lleva a niveles de imprecisión que son casi imperceptibles para usuarios. Sin embargo, con la telefonía móvil o de radio, hay varias etapas Los retrasos relativamente largos y asimétricos pueden introducirse en una transacción de red lo que genera una mayor imprecisión.
Con la configuración predeterminada de AOSP para config_ntpTimeout
establecida en 5000
milisegundos,
y si toda la latencia de la red se concentra únicamente en el tráfico entrante o saliente,
el error teórico máximo es de aproximadamente 2.5 segundos.
La precisión general del reloj del sistema también se ve afectada por la capacidad del dispositivo Android.
para realizar un seguimiento preciso del tiempo transcurrido después de que se obtiene una señal de tiempo. Este es un
le preocupa la hora en Android, no solo la detección de la hora de la red, y
por qué el servicio time_detector
ignora las sugerencias de horarios anteriores. El
El servicio network_time_update_service
se actualiza con regularidad mediante el
Intervalo de config_ntpPollingInterval
para mantener el servicio time_detector
proporcionadas con sugerencias de horarios actualizados y para garantizar que el time_detector
no recurre a una prioridad más baja y, a menudo,
una menor precisión o
orígenes de hora incorrectos ocasionalmente, como telephony
.
Cuando se usa la detección automática de la hora, se puede modificar la precisión del reloj del sistema del dispositivo
afectados por otras configuraciones del servicio time_detector
, como la
constantes y marcas que afectan qué tan diferente debe ser una sugerencia de hora
la hora actual del reloj del sistema antes de que se ajuste el reloj
(ServiceConfigAccessorImpl.java
).
Los fabricantes de dispositivos pueden modificar la precisión con la configuración anterior opciones y constantes. Sin embargo, es importante conocer las limitaciones del la implementación de SNTP de la plataforma y el impacto potencial en el consumo de operaciones de red más frecuentes, impacto en las apps que se ejecutan en el dispositivo desde ajustes de reloj más frecuentes pero menores, y el efecto en la carga del servidor.
Otros usos del tiempo de red
Si la detección automática de la hora con el origen network
no está configurada o si
el usuario inhabilitó la detección de hora automática, la hora obtenida por
Los siguientes componentes todavía usan el servicio de network_time_update_service
:
- El
SystemClock.currentNetworkTimeClock()
. - Funciones de la plataforma interna Por ejemplo, A-GPS puede localizar un GNSS (ubicación) antes de arreglarlo más rápido cuando tiene información de la hora de la red.
Depuración y pruebas
En la siguiente sección, se describen los comandos de shell para depurar y probar la la función de detección del tiempo de red.
Interactúa con el servicio network_time_update_service
Para volcar el estado actual de network_time_update_service
, usa lo siguiente:
adb shell cmd network_time_update_service dump
Para ver un conjunto de opciones de línea de comandos que pueden ayudarte con las pruebas, usa lo siguiente:
adb shell cmd network_time_update_service help