Ağ saatini algılama

Android cihazlar otomatik olarak bir ağ kaynağıdır. Android, UDP protokolünü kullanan SNTP protokolünü kullanır, zaman bilgisi almaktır.

Bu sayfada açıklanan bileşenler, otomatik zaman algılamanın bir parçasıdır. ağ zaman kaynağı olarak adlandırılır. Şuradan bir zaman sinyali: bir ağ saat sunucusu, aşağıdaki durumlarda Android cihazın sistem saatini ayarlamak için otomatik saat algılama özelliği cihazda ve time_detector hizmeti kullanacak şekilde yapılandırıldığından emin olun.

Varsayılan olarak, Android birincil veri kaynağı olarak ağ zaman kaynağını kullanır. otomatik saat algılama kaynağı.

Ağ saati algılama sistemi

Android sistem sunucusunda çalışan network_time_update_service hizmeti ağ zaman algılama sistemini uygular. Hizmet, belirli aralıklarla SNTP, sunucudan zaman sinyali almak için kullanılır. Hizmet ayrıca ağı da izler. bağlantı kurulur ve son saat sinyali bulunmadığında zaman yenilemesi tetiklenir uzun süren zayıf bağlantı durumlarından sonra.

network_time_update_service hizmeti, zaman sinyali almaya çalışır ağ bağlantısı ilk kez kurulduğunda görebilirsiniz. İlgili içeriği oluşturmak için kullanılan elindeki en son sinyali güncel tutmaya çalışır. Organizasyondaki fazla yüke sahip olan bağımsız Android cihazların çeşitli Android cihazlarda zaman geçiriyor.

network_time_update_service, dahili API'leri kullanarak ağ saatini gönderir time_detector hizmetine öneriler. Diğer Android platformu bu ağ süresi önerilerini kullanır.

Ağ zaman kaynağından öneriler aldıktan sonra time_detector hizmet, sistem saatinin yapılandırdığınız önceliklendirme kuralları oluşturun.

Otomatik zaman algılama sistemini, ağ kaynağını kullanacak şekilde yapılandırmak için saatin otomatik olarak ayarlanmasını istiyorsanız core/res/res/values/config.xml sistem sunucusu yapılandırma dosyası. Lütfen network değeri, istenenconfig_autoTimeSourcesPriority dokunun. Ayrıntılar için bkz. Zaman Kaynağı Önceliği.

Cihaz yapılandırması

Bu bölümde, cihaz üreticilerinin ağı nasıl yapılandırabileceği açıklanmaktadır. zaman algılama sisteminden yararlanabilirsiniz.

Temel AOSP yapılandırması şurada: frameworks/base/core/res/res/values/config.xml:

Yapılandırma anahtarı AOSP değeri Açıklama
config_ntpRetry 3 Bu sayı, yenileme işlemi başarısız olduktan sonra sistemin kaç defa yeniden denediğini gösterir. daha kısa NTP yoklama aralığıyla ağ zaman yoklaması (config_ntpPollingIntervalShorter), yedekleyip kullanmadan önce normal yoklama aralığı (config_ntpPollingInterval). Değer 0 değerinden düşük ise sistemin yoklamayı daha kısa NTP'de yeniden denediği anlamına gelir. başarılı bir şekilde yenilenene dek yoklama aralığını belirleyin.
config_ntpPollingInterval 64800000 (18 saat) Milisaniye cinsinden normal ağ süresi yoklama aralığı.
config_ntpPollingIntervalShorter 60000 (1 dakika) Milisaniye cinsinden yeniden deneme ağ zamanı yoklama aralığı. Kullanıldığı durum zaman yenilemesi başarısız olur.
config_ntpServers Tek bir giriş: ntp://time.android.com Doğru zamanı almak için kullanılacak NTP sunucuları. Öğeler şu biçimde olmalıdır: ntp://<host>[:port]
Bu, kayıtlı bir IANA URI şeması değildir.
config_ntpTimeout 5.000 Zaman aşımından önce NTP sunucusu yanıtının milisaniye cinsinden bekleme süresi.

Sunucular

AOSP, varsayılan olarak time.android.com konumundaki saat sunucularını kullanır. Bu saat Google Açık NTP. Bu hizmette HDS yok. Ayrıntılar için Google Public NTP SSS.

Birden çok sunucu desteği

Çerçeve, Android 14 ve sonraki sürümlerde birden fazla NTP sunucusu Bu, cihazların tek bir yapılandırma ile küresel olarak dağıtılmış ancak sunuculara erişim imkanı sunan time.android.com gibi bazı yerlerde kısıtlanmıştır.

Algoritma, config_ntpServers içinde belirtilen her sunucuyu dener yapılandırma anahtarı. Yanıt veren bir yanıt bulduğunda sistem bu sunucu yenilenmeyene veya cihaz yeniden başlatılana kadar devre dışı kalır.

Doğruluk

Android'in varsayılan ağ saati senkronizasyonu, tek bir zaman sorgusuyla SNTP kullanır saat sinyalinin her zaman güncel olduğundan emin olmak için günde yaklaşık bir kez.

Ağdaki gecikme etkileri, tek bir veri tabanında zamanın doğru olmamasına Android'in SNTP uygulaması. SNTP, simetrik ağ gecikmelerini varsayar. isteğin ağ gecikmesi, isteğin ağ gecikmesi ile aynıdır; ve doğru zaman tam olarak bu itirazın ağ gidiş dönüşü var. Ağ gidiş dönüş süresi genellikle birkaç yüzlerce milisaniye ve kablolu bir ağda gecikmenin simetrik, bu da neredeyse fark edilemeyecek kadar yüksek yardımcı olur. Ancak, mobil veya telsiz telefonların iletişimde bir dizi aşama vardır. nispeten uzun olan asimetrik gecikmeler bir ağ işlemine eklenebilir daha fazla tutarsızlığa yol açabilir.

config_ntpTimeout için varsayılan AOSP ayarı 5000 milisaniye olarak belirlendiğinde, ve tüm ağ gecikmesi yalnızca gelen veya giden maksimum teorik hata yaklaşık 2, 5 saniyedir.

Genel sistem saat doğruluğu, Android cihazın yeteneğinden de etkilenir. bir zaman sinyali elde edildikten sonra geçen süreyi doğru bir şekilde izlemek Bu, ağdaki zamanı algılamayla değil, Android'deki tüm zaman tutmayla ilgili time_detector hizmetinin eski zaman önerilerini neden dikkate almadığı. İlgili içeriği oluşturmak için kullanılan network_time_update_service hizmeti, şunu kullanarak düzenli olarak yenilenir: time_detector hizmetini sürdürmek için config_ntpPollingInterval zaman aralığı güncel zaman önerileriyle birlikte sunulduğundan ve time_detector doğruluk düzeyi genellikle daha düşük ve doğruluğu daha düşük zaman zaman hatalı zaman kaynakları (ör. telephony).

Otomatik saat algılama özelliği kullanıldığında, cihaz sistem saat doğruluğu time_detector hizmetinin diğer yapılandırmalarından; örneğin bir zaman önerisinin ne kadar farklı olması gerektiğini etkileyen sabit değerler ve işaretler saat ayarlanmadan önce geçerli sistem saati (ServiceConfigAccessorImpl.java).

Cihaz üreticileri, önceki yapılandırmayı kullanarak doğruluğu değiştirebilir seçenekleri ve sabit değerleri gösterir. Ancak ekip üyelerinizle birlikte konuşurken platformun SNTP uygulaması ve güç tüketimi üzerindeki potansiyel etkisi veya cihaz üzerinde çalışan uygulamalara etkisi saat ayarlamaları yapılmasını ve sunucu yükü üzerindeki etkisini görebilirsiniz.

Ağ süresinin diğer kullanımları

network kaynağını kullanarak otomatik zaman algılama yapılandırılmazsa veya Kullanıcı, otomatik saat algılamayı devre dışı bıraktı. Bu, kullanıcının network_time_update_service hizmeti hâlâ aşağıdaki bileşenler tarafından kullanılıyor:

  • İlgili içeriği oluşturmak için kullanılan SystemClock.currentNetworkTimeClock() yöntemidir.
  • Dahili platform işlevleri. Örneğin, A-GPS bir GNSS'nin (konum) yerini belirleyebilir. ilk olarak ağ saati bilgisi varsa daha hızlı düzeltebilirsiniz.

Hata ayıklama ve test etme

Aşağıdaki bölümde, hata ayıklama ve test amaçlı kabuk komutları açıklanmaktadır. ağ saatini algılama özelliğine erişebilirsiniz.

network_time_update_service ile etkileşim kurun

network_time_update_service öğesinin mevcut durumunu döküm almak için şunu kullanın:

adb shell cmd network_time_update_service dump

Test konusunda yardımcı olabilecek bir dizi komut satırı seçeneğini görmek için şunu kullanın:

adb shell cmd network_time_update_service help