Android cihazlar, bir ağ kaynağından doğru Unix epoch zamanını otomatik olarak almaya çalışır. Android, zaman bilgilerini almak için UDP protokolünü kullanan SNTP protokolünü kullanır.
Bu sayfada açıklanan bileşenler, ağ zamanı kaynağı olarak adlandırılan otomatik zaman algılama sisteminin bir parçasıdır. Cihazda otomatik zaman 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ğ zaman sunucusundan gelen zaman sinyali kullanılabilir.
Android, varsayılan olarak birincil otomatik saat algılama kaynağı olarak ağ saati kaynağını kullanır.
Ağ saatini algılama sistemi
Android sistem sunucusunda çalışan network_time_update_service
hizmeti, ağ saati algılama sistemini uygular. Hizmet, bir sunucudan zaman sinyali almak için düzenli olarak SNTP'yi kullanır. Bu hizmet, ağ bağlantısını da izler ve uzun süreli zayıf bağlantıdan sonra son zaman sinyali alınamadığında saat yenileme işlemini tetikler.
network_time_update_service
hizmeti, başlatma işleminden sonra ve ağ bağlantısı ilk kurulduğunda zaman sinyali almaya çalışır. Ardından hizmet, elindeki en son sinyali güncel tutmaya çalışır. Bu hizmet, dünya genelinde birçok Android cihazın saatini yenilemesiyle oluşabilecek önemli yükü, tek tek Android cihazların ihtiyaçlarıyla dengeler.
network_time_update_service
, dahili API'leri kullanarak time_detector
hizmetine ağ zamanı önerileri gönderir. Diğer Android platform bileşenleri bu ağ saati önerilerini kullanır.
Ağ zamanı kaynağı tarafından öneriler alındıktan sonra time_detector
hizmeti, yapılandırılmış önceliklendirme kurallarına göre sistem saatini güncelleyip güncellemeyeceğine karar verir.
Otomatik zaman algılama sistemini, sistem saatini otomatik olarak ayarlamak için ağ kaynağı önerilerini kullanacak şekilde yapılandırmak istiyorsanız core/res/res/values/config.xml
sistem sunucusu yapılandırma dosyasını kullanın. Değerin network
, istenen konumda config_autoTimeSourcesPriority
içinde yer aldığından 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 konumdadır:
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 olduktan sonra, sistemin geri çekilip normal yoklama aralığını (config_ntpPollingInterval ) kullanmadan önce daha kısa bir NTP yoklama aralığıyla (config_ntpPollingIntervalShorter ) ağ saati yoklaması yapmayı denediği sayı. 0 'den küçük bir değer, sistemin başarılı bir şekilde yenileyene kadar daha kısa NTP yoklama aralığında yoklamayı yeniden denediği anlamına gelir. |
config_ntpPollingInterval |
64800000 (18 saat) |
Normal ağ zamanı yoklama aralığı (milisaniye). |
config_ntpPollingIntervalShorter |
60000 (1 dakika) |
Yeniden deneme ağının milisaniye cinsinden yoklama aralığı. Zaman yenileme işlemi başarısız olduğunda kullanılır. |
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ğil. |
config_ntpTimeout |
5.000 | Zaman aşımından önce NTP sunucusu 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'nin diğer adıdır. Bu hizmetin HDS'si 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 tek bir yapılandırmayla dünya genelinde 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, yenileme 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, yaklaşık olarak günde bir kez tek bir zaman sorgusuyla SNTP kullanır. Bu sayede her zaman güncel bir zaman sinyaline sahip olmaya çalışır.
Ağ gecikmesi etkileri, Android'in SNTP uygulamasında zamanın yanlış olmasının en büyük nedenidir. SNTP, simetrik ağ gecikmelerinin olduğunu varsayar. Yani, istek için ağ gecikmesi, yanıt için ağ gecikmesiyle aynıdır ve doğru zaman, bu ağ gidiş dönüşünün tam ortasında yer alır. Genellikle ağ gidiş dönüş süresi birkaç yüz milisaniye civarındadır ve kablolu bir ağda gecikme neredeyse simetriktir. Bu da kullanıcılar tarafından neredeyse algılanamayacak düzeyde bir yanlışlığa yol açar. Ancak mobil veya radyo telefonlarda, ağ işlemine nispeten uzun ve asimetrik gecikmelerin eklenebileceği birkaç aşama vardır. Bu durum, daha fazla yanlışlığa yol açar.
config_ntpTimeout
için AOSP varsayılan ayarı 5000
milisaniye olarak ayarlanmışsa ve tüm ağ gecikmesi yalnızca gelen veya giden bacakta yoğunlaşmışsa teorik maksimum hata yaklaşık 2,5 saniyedir.
Genel sistem saati doğruluğu, Android cihazın bir zaman sinyali alındıktan sonra geçen süreyi doğru şekilde izleme özelliğinden de etkilenir. Bu sorun, yalnızca ağ saati algılamayla ilgili değil, Android'deki tüm zaman tutma işlemleriyle ilgilidir ve time_detector
hizmetinin eski saat önerilerini göz ardı etmesinin nedeni budur. network_time_update_service
hizmeti, time_detector
hizmetine yeni zaman önerileri sunmak ve time_detector
hizmetinin daha düşük öncelikli ve genellikle daha düşük doğruluklu veya bazen yanlış zaman kaynaklarına (ör. telephony
) geri dönmemesini sağlamak için config_ntpPollingInterval
aralığını kullanarak düzenli olarak yenilenir.
Otomatik saat algılama kullanıldığında cihazın sistem saati doğruluğu, time_detector
hizmetinin diğer yapılandırmalarından (ör. saat ayarlanmadan önce saat önerisinin mevcut sistem saatiyle ne kadar farklı olması gerektiğini etkileyen sabitler ve işaretler) etkilenebilir (ServiceConfigAccessorImpl.java
).
Cihaz üreticileri, yukarıdaki yapılandırma seçeneklerini ve sabitleri kullanarak doğruluğu değiştirebilir. Ancak platformun SNTP uygulamasının sınırlamalarının, daha sık ağ işlemlerinden kaynaklanan güç tüketimi üzerindeki olası etkisinin, daha sık ancak daha küçük saat ayarlamalarından kaynaklanan cihazda çalışan uygulamalar üzerindeki etkisinin ve sunucu yükü üzerindeki etkisinin farkında olmak önemlidir.
Ağ zamanının diğer kullanımları
network
kaynağı kullanılarak otomatik saat algılama yapılandırılmamışsa veya kullanıcı otomatik saat algılamayı devre dışı bırakmışsa 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 bilgisine 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şimde bulunma
network_time_update_service
'nın mevcut durumunu boşaltmak için şunu 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 şunu kullanın:
adb shell cmd network_time_update_service help