Os dispositivos Android tentam obter automaticamente o horário de época Unix correto de uma fonte de rede. O Android usa o protocolo SNTP, que usa o protocolo UDP, para obter informações de tempo.
Os componentes descritos nesta página fazem parte do sistema de detecção automática de tempo
conhecida como origem da hora da rede. Um sinal de horário
um servidor de horário de rede pode ser usado para definir o relógio do sistema do dispositivo Android quando
a detecção automática de hora tem suporte no dispositivo e na time_detector
está configurado para usá-lo.
Por padrão, o Android usa a origem de horário da rede como a principal origem da detecção automática de tempo.
Sistema de detecção de horário da rede
O serviço network_time_update_service
, que é executado no servidor do sistema Android
implementa o sistema de detecção de tempo de rede. O serviço usa periodicamente
SNTP para obter um sinal de horário de um servidor. O serviço também monitora a rede
conectividade e aciona uma atualização de horário quando nenhum sinal de horário recente está disponível
após longos períodos de conectividade ruim.
O serviço network_time_update_service
tenta receber um sinal de horário
após a inicialização
e quando a conectividade de rede é estabelecida. A
serviço tenta manter o sinal mais recente atualizado. Ele equilibra a
e necessidades individuais de dispositivos Android, com uma carga substancial
geradas por muitos dispositivos Android no mundo todo atualizando o tempo.
Usando APIs internas, o network_time_update_service
envia o horário da rede
sugestões para o serviço time_detector
. Outra plataforma Android
e use essas sugestões de tempo de rede.
Depois de receber sugestões da origem de horário de rede, o time_detector
serviço determina se o relógio do sistema deve ser atualizado de acordo com a
regras de priorização configuradas.
Configurar o sistema de detecção automática de tempo para usar a origem da rede
sugestões para definir o relógio do sistema automaticamente, use o
Arquivo de configuração do servidor do sistema core/res/res/values/config.xml
. Assegure-se de que
o valor network
está contido em config_autoTimeSourcesPriority
no campo
posição Para mais detalhes, consulte
Prioridade da fonte de tempo.
Configuração do dispositivo
Esta seção descreve como os fabricantes de dispositivos podem configurar a rede sistema de detecção de horário.
A configuração básica do AOSP é
frameworks/base/core/res/res/values/config.xml
:
Chave de configuração | Valor do AOSP | Descrição |
---|---|---|
config_ntpRetry |
3 |
Após uma falha na atualização, esse é o número de vezes que o sistema tenta
Sondagem de tempo de rede com um intervalo de sondagem de NTP menor
(config_ntpPollingIntervalShorter ), antes de recuar e usar
o intervalo de sondagem normal (config_ntpPollingInterval ). Um valor
menos de 0 significa que o sistema tentará de novo no NTP mais curto
intervalo de sondagem até que ele
seja atualizado corretamente. |
config_ntpPollingInterval |
64800000 (18 horas) |
O intervalo de sondagem de tempo de rede normal em milissegundos. |
config_ntpPollingIntervalShorter |
60000 (1 minuto) |
O intervalo de sondagem de tempo da rede da nova tentativa em milissegundos. Usado quando quando uma atualização de horário falha. |
config_ntpServers |
Uma única entrada: ntp://time.android.com |
Servidores NTP a serem usados para obter um horário preciso. Os itens devem estar no formato:
ntp://<host>[:port] :
Este não é um esquema de URI da IANA registrado. |
config_ntpTimeout |
5000 | Tempo de espera da resposta do servidor NTP em milissegundos antes do tempo limite. |
Servidores
Por padrão, o AOSP usa servidores de horário em time.android.com
, que é um alias para
NTP público do Google. Este serviço tem
sem SLA. Para mais detalhes, consulte a
Perguntas frequentes sobre a NTP pública do Google.
Suporte a vários servidores
No Android 14 e versões mais recentes, o framework tem suporte
vários servidores NTP. Isso permite que os dispositivos
distribuídos globalmente com uma única configuração, mas onde o acesso aos servidores
como time.android.com
, são restritas em alguns lugares.
O algoritmo tenta cada servidor especificado no config_ntpServers
.
chave de configuração do Compute Engine. Quando encontra um que responde, o sistema continua usando
até que ele não seja atualizado ou o dispositivo seja reinicializado.
Precisão
A sincronização de tempo de rede padrão do Android usa SNTP com uma única consulta de tempo aproximadamente uma vez por dia para tentar garantir que sempre tenha um sinal de horário recente.
Os efeitos da latência da rede são o maior contribuinte para a imprecisão de tempo nas Implementação de SNTP no Android. O SNTP assume atrasos de rede simétricos, ou seja, a latência da rede da solicitação for igual à latência da rede do resposta correta, e o horário correto é exatamente o meio dessa ida e volta na rede. Frequentemente, o tempo de retorno da rede está na ordem de alguns cem milissegundos e, em uma rede com fio, a latência é próxima simétricos, levando a níveis de imprecisão quase imperceptíveis para usuários. No entanto, na telefonia móvel ou via rádio, há vários estágios atrasos assimétricos relativamente longos podem ser inseridos em uma transação de rede aumentando a imprecisão.
Com a configuração padrão do AOSP para config_ntpTimeout
definida como 5000
milissegundos,
e se toda a latência da rede estiver concentrada apenas nas cargas de
trecho, o erro teórico máximo é de aproximadamente 2,5 segundos.
A precisão geral do relógio do sistema também é afetada pela capacidade do dispositivo Android
para rastrear com precisão o tempo decorrido após a obtenção de um sinal de tempo. Esta é uma
com o controle de tempo no Android, não apenas com a detecção de horário de rede,
por que o serviço time_detector
ignora sugestões de horários antigos A
O serviço network_time_update_service
é atualizado regularmente usando o
Intervalo config_ntpPollingInterval
para manter o serviço time_detector
fornecidas com novas sugestões de horário e para garantir que o time_detector
serviço não volta para uma prioridade mais baixa e, muitas vezes, precisão ou
às vezes origens de hora incorretas, como telephony
.
Quando a detecção automática de tempo é usada, a precisão do relógio do sistema do dispositivo pode ser
afetadas por outras configurações do serviço time_detector
, como
constantes e sinalizações que afetam a diferença entre uma sugestão de tempo e
a hora atual do relógio do sistema antes do ajuste do relógio
(ServiceConfigAccessorImpl.java
).
Os fabricantes de dispositivos podem modificar a acurácia usando a configuração anterior e constantes. Mas é importante estar ciente das limitações da implementação do SNTP na plataforma e o possível impacto no consumo de energia de operações de rede mais frequentes, ao impacto nos aplicativos em execução no dispositivo a partir de ajustes de relógio mais frequentes, porém menores, e o efeito na carga do servidor.
Outros usos do tempo de rede
Se a detecção automática de hora usando a origem network
não estiver configurada ou se
o usuário desativou a detecção automática de hora, a hora obtida pelo
O serviço network_time_update_service
ainda é usado pelos seguintes componentes:
- A
SystemClock.currentNetworkTimeClock()
. - Funções da plataforma interna. Por exemplo, o A-GPS pode localizar um GNSS (localização) quando há informações de horário da rede.
Depuração e testes
A seção a seguir descreve comandos do shell para depurar e testar o recurso de detecção de tempo de rede.
Interagir com o serviço network_time_update_service
Para despejar o estado atual de network_time_update_service
, use:
adb shell cmd network_time_update_service dump
Para ver um conjunto de opções de linha de comando que podem ajudar nos testes, use:
adb shell cmd network_time_update_service help