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. Cihazınızda otomatik saat algılama destekleniyorsa ve time_detector
hizmeti bunu kullanacak şekilde yapılandırılmışsa Android cihazın sistem saatini ayarlamak için bir ağ saat sunucusu tarafından gönderilen bir saat sinyali 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üre boyunca zayıf bağlantı olduğunda son zaman sinyali alınamadığında saati yenileme işlemini 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. Daha sonra hizmet, elinde tuttuğu en son sinyali güncel tutmaya çalışır. Bu mekanizma, 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 time_detector
hizmetine ağ saati önerileri gönderir. Diğer Android platform bileşenleri 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 düşü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 ağ zamanı yeniden deneme anketi aralığı. Saat yenileme başarısız olduğunda kullanılır. |
config_ntpServers |
Tek giriş: ntp://time.android.com |
Doğru saati 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ı öncesinde NTP sunucu yanıtı için bekleme süresi (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 sunucuya dener. Yanıt veren bir sunucu bulduğunda sistem, yenileme işlemi başarısız olana veya cihaz yeniden başlatılana kadar bu 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.
Android'in SNTP uygulamasında zaman hatasının en büyük nedeni ağ gecikmesi etkileridir. 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 önerileri alması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ı kullanan otomatik saat 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 saat aşağıdaki bileşenler tarafından kullanılmaya devam eder:
SystemClock.currentNetworkTimeClock()
yöntemi.- Dahili platform işlevleri. Örneğin, A-GPS, ağ saati bilgilerine sahip 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