Detecção de horário da rede

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:

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