Android cihazlar, bir ağ kaynağından doğru Unix epoch zamanını otomatik olarak elde etmeye çalışır. Android, saat bilgilerini almak için UDP protokolünü kullanan SNTP protokolünü kullanır.
Bu sayfada açıklanan bileşenler, ağ saat kaynağı olarak adlandırılan otomatik saat algılama sisteminin bir parçasıdır. Cihazda otomatik saat algılama özelliği desteklendiğinde ve time_detector
hizmeti bunu kullanacak şekilde yapılandırıldığında, ağ saat sunucusundan alınan zaman sinyali Android cihazın sistem saatini ayarlamak için kullanılabilir.
Android, varsayılan olarak birincil otomatik saat algılama kaynağı olarak ağ saati kaynağını kullanır.
Ağ saati algılama sistemi
Android sistem sunucusunda çalışan network_time_update_service
hizmeti, ağ saati algılama sistemini uygular. Hizmet, bir sunucudan saat sinyali almak için düzenli olarak SNTP kullanır. Hizmet ayrıca ağ bağlantısını izler ve uzun süreli zayıf bağlantı süresinden sonra yakın zaman sinyali olmadığında bir zaman yenilemesi tetikler.
network_time_update_service
hizmeti, önyükleme işleminden sonra ve ağ bağlantısı ilk kez kurulduğunda zaman sinyali elde etmeye çalışır. Ardından hizmet, elinde bulundurduğu en son sinyali güncel tutmaya çalışır. Bu mekanizma, tek tek Android cihazların ihtiyaçlarını dünya genelindeki birçok Android cihazın saatini yenilemesiyle oluşabilecek önemli yük arasında denge kurar.
network_time_update_service
, dahili API'leri kullanarak ağ süresi önerilerini time_detector
hizmetine gönderir. Diğer Android platformu bileşenleri de bu ağ saati önerilerini kullanır.
time_detector
hizmeti, ağ saat kaynağından öneriler aldıktan sonra sistem saatinin yapılandırılan öncelikli kurallara göre güncellenip güncellenmeyeceğini belirler.
Otomatik saat algılama sistemini, sistem saatini otomatik olarak ayarlamak için ağ kaynağı önerilerini kullanacak şekilde yapılandırmak üzere core/res/res/values/config.xml
sistem sunucusu yapılandırma dosyasını kullanın. network
değerinin config_autoTimeSourcesPriority
içinde istenen konumda bulunduğundan emin olun. Ayrıntılar için Zaman Kaynağı Önceliği başlıklı makaleyi inceleyin.
Cihaz yapılandırması
Bu bölümde, cihaz üreticilerinin ağ saati algılama sistemini nasıl yapılandırabileceği açıklanmaktadır.
Temel AOSP yapılandırması şu adrestedir:
frameworks/base/core/res/res/values/config.xml
:
Yapılandırma anahtarı | AOSP değeri | Açıklama |
---|---|---|
config_ntpRetry |
3 |
Yenileme başarısız olduğunda, sistem normal aralığı (config_ntpPollingInterval ) kullanmadan önce daha kısa bir NTP aralığı (config_ntpPollingIntervalShorter ) kullanarak ağ saatini sorgulamaya kaç kez çalıştığıdır. 0 'den küçük bir değer, sistemin başarılı bir şekilde yenileyebilmesi için daha kısa NTP aralığında sorgulamaya yeniden çalıştığı anlamına gelir. |
config_ntpPollingInterval |
64800000 (18 saat) |
Milisaniye cinsinden normal ağ zamanı anket aralığı. |
config_ntpPollingIntervalShorter |
60000 (1 dakika) |
Milisaniye cinsinden yeniden deneme ağ zamanı yoklama aralığı. Saat yenileme başarısız olduğunda kullanılır. |
config_ntpServers |
Tek 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ğil. |
config_ntpTimeout |
5.000 | Zaman aşımı öncesinde NTP sunucu yanıtı için beklenecek süre (milisaniye cinsinden). |
Sunucular
AOSP varsayılan olarak time.android.com
adresindeki zaman sunucularını kullanır. Bu adres, Google Public NTP için bir takma addır. Bu hizmet için HDS yoktur. Ayrıntılar için Google Public NTP SSS sayfasını inceleyin.
Birden fazla sunucu desteği
Android 14 ve sonraki sürümlerde çerçeve birden fazla NTP sunucusunu destekler. Bu, cihazların dünya genelinde tek bir yapılandırmayla dağıtıldığı ancak time.android.com
gibi sunuculara erişimin belirli yerlerde kısıtlandığı durumları destekler.
Algoritma, config_ntpServers
yapılandırma anahtarında belirtilen her sunucuyu dener. Yanıt veren bir sunucu bulduğunda sistem, yenilenmeyene veya cihaz yeniden başlatılana kadar o sunucuyu kullanmaya devam eder.
Doğruluk
Android'in varsayılan ağ saati senkronizasyonu, her zaman güncel bir saat sinyali almasını sağlamak için yaklaşık günde bir kez tek bir saat sorgusu ile SNTP kullanır.
Ağ gecikmesi etkileri, Android'in SNTP uygulamasındaki zaman hatasına en çok katkıda bulunan faktörlerdir. SNTP, simetrik ağ gecikmeleri olduğunu varsayar. Yani istek için ağ gecikmesi, yanıt için ağ gecikmesiyle aynıdır ve doğru zaman tam olarak bu ağ gidiş dönüşünün ortasındadır. Ağ gidiş dönüş süresi genellikle birkaç yüz milisaniye civarındadır ve kablolu ağlarda gecikme simetriktir. Bu da kullanıcılar tarafından neredeyse fark edilemeyen düzeyde yanlışlıklara neden olur. Ancak mobil veya radyo telefonlarında, ağ işlemine nispeten uzun, asimetrik gecikmeler eklenebilir. Bu da daha fazla hataya neden olur.
config_ntpTimeout
için AOSP varsayılan ayarı 5000
milisaniye olarak ayarlandığında ve tüm ağ gecikmesi yalnızca gelen veya giden bağlantıya odaklanırsa maksimum teorik hata yaklaşık 2,5 saniyedir.
Genel sistem saati doğruluğu, Android cihazın bir saat sinyali alındıktan sonra geçen süreyi doğru şekilde izleyebilme özelliğinden de etkilenir. Bu durum, yalnızca ağ saati algılama değil, Android'deki tüm saat tutmayla ilgili bir sorundur ve time_detector
hizmetinin eski saat önerilerini dikkate almaması bu nedenledir. network_time_update_service
hizmeti, time_detector
hizmetinin güncel zaman önerileriyle sağlanmasını sağlamak ve time_detector
hizmetinin daha düşük öncelikli ve genellikle daha düşük doğruluktaki veya bazen telephony
gibi yanlış zaman kaynaklarına geri dönmesini önlemek için config_ntpPollingInterval
aralığını kullanarak düzenli olarak yenilenir.
Otomatik saat algılama kullanıldığında cihazın sistem saatinin doğruluğu, time_detector
hizmetinin diğer yapılandırmalarından (ör. saat ayarlanmadan önce bir saat önerisinin mevcut sistem saatinden ne kadar farklı olması gerektiğini etkileyen sabitler ve işaretler) etkilenebilir (ServiceConfigAccessorImpl.java
).
Cihaz üreticileri, önceki yapılandırma seçeneklerini ve sabitlerini kullanarak doğruluğu değiştirebilir. Ancak platformun SNTP uygulamasının sınırlamalarının, daha sık ağ işlemlerinin güç tüketimi üzerindeki olası etkisinin, daha sık ancak daha küçük saat ayarlarının cihazda çalışan uygulamalar üzerindeki etkisinin ve sunucu yükü üzerindeki etkisinin farkında olmanız önemlidir.
Ağ zamanının 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ıysa network_time_update_service
hizmeti tarafından elde edilen zaman yine aşağıdaki bileşenler tarafından kullanılır:
SystemClock.currentNetworkTimeClock()
yöntemi.- Dahili platform işlevleri. Örneğin, A-GPS, ağ saati bilgileri olduğunda GNSS (konum) ilk düzeltmesini daha hızlı bulabilir.
Hata ayıklama ve test
Aşağıdaki bölümde, ağ saati algılama özelliğinde hata ayıklama ve test için kullanılan kabuk komutları açıklanmaktadır.
network_time_update_service hizmetiyle etkileşim kurma
network_time_update_service
'ün mevcut durumunu dökmek için şunları kullanın:
adb shell cmd network_time_update_service dump
Teste yardımcı olabilecek bir dizi komut satırı seçeneğini görmek için şunları kullanın:
adb shell cmd network_time_update_service help