Android aygıtları otomatik olarak bir ağ kaynağından doğru Unix dönem zamanını almaya çalışır. Android, zaman bilgisini elde etmek 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 desteklendiğinde ve time_detector
hizmeti bunu kullanacak şekilde yapılandırıldığında, Android cihazının sistem saatini ayarlamak için bir ağ zaman sunucusundan gelen zaman sinyali kullanılabilir.
Varsayılan olarak Android, birincil otomatik zaman algılama kaynağı olarak ağ zaman kaynağını kullanır.
Ağ zaman tespit sistemi
Android sistem sunucusunda çalışan network_time_update_service
hizmeti, ağ zaman algılama sistemini uygular. Hizmet, sunucudan zaman sinyali almak için düzenli olarak SNTP'yi kullanır. Hizmet aynı zamanda ağ bağlantısını da izler ve uzun süre zayıf bağlantının ardından yakın zaman sinyali gelmediğinde zaman yenilemeyi tetikler.
network_time_update_service
hizmeti, önyüklemeden sonra ve ağ bağlantısı ilk kez kurulduğunda bir zaman sinyali almaya çalışır. Hizmet daha sonra tuttuğu en son sinyali taze tutmaya çalışır. Bireysel Android cihazların ihtiyaçlarını, dünya çapındaki birçok Android cihazının zamanlarını yenilemesinin oluşturabileceği önemli yük ile dengeler.
network_time_update_service
, dahili API'leri kullanarak ağ zamanı önerilerini time_detector
hizmetine gönderir. Daha sonra diğer Android platformu bileşenleri bu ağ süresi önerilerini kullanır.
time_detector
hizmeti, ağ zaman kaynağından öneriler aldıktan sonra sistem saatinin yapılandırılmış önceliklendirme kurallarına göre güncellenip güncellenmeyeceğini belirler.
Otomatik zaman algılama sistemini, sistem saatini otomatik olarak ayarlamak amacıyla ağ kaynağı önerilerini kullanacak şekilde yapılandırmak için core/res/res/values/config.xml
sistem sunucusu yapılandırma dosyasını kullanın. Değer network
config_autoTimeSourcesPriority
istenen konumda bulunduğundan emin olun. Ayrıntılar için bkz. Zaman Kaynağı Önceliği .
Cihaz konfigürasyonu
Bu bölümde cihaz üreticilerinin ağ zaman algılama sistemini nasıl yapılandırabilecekleri açıklanmaktadır.
Temel AOSP yapılandırması frameworks/base/core/res/res/values/config.xml
konumundadır:
Yapılandırma anahtarı | AOSP değeri | Tanım |
---|---|---|
config_ntpRetry | 3 | Yenileme başarısız olduktan sonra bu, sistemin geri çekilmeden ve normal yoklama aralığını ( config_ntpPollingIntervalShorter ) kullanmadan önce, daha kısa bir NTP yoklama aralığı ( config_ntpPollingInterval ) ile ağ zaman yoklaması yapmayı deneme sayısıdır. 0 küçük bir değer, sistemin başarıyla yenileninceye kadar daha kısa NTP yoklama aralığında yoklamayı yeniden denediği anlamına gelir. |
config_ntpPollingInterval | 64800000 (18 saat) | Milisaniye cinsinden normal ağ zamanı yoklama aralığı. |
config_ntpPollingIntervalShorter | 60000 (1 dakika) | Milisaniye cinsinden ağ yeniden deneme zamanı yoklama aralığı. Zaman yenileme başarısız olduğunda kullanılır. |
config_ntpServers | Tek bir giriş: ntp://time.android.com | Doğru zamanı elde etmek 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 | 5000 | Zaman aşımına uğramadan önce milisaniye cinsinden NTP sunucusu yanıtı için beklenecek süre. |
Sunucular
Varsayılan olarak AOSP, Google Public NTP'nin takma adı olan time.android.com
adresindeki zaman sunucularını kullanır. Bu hizmetin SLA'sı yoktur. Ayrıntılar için Google Genel NTP SSS sayfasına bakın.
Çoklu sunucu desteği
Android 14 ve üzeri için çerçeve birden fazla NTP sunucusunu destekler. Bu, cihazların tek bir yapılandırmayla küresel olarak 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.
Kesinlik
Android'in varsayılan ağ zaman senkronizasyonu, her zaman yakın zaman sinyaline sahip olduğundan emin olmak için yaklaşık günde bir kez tek zamanlı sorguyla SNTP'yi kullanır.
Ağ gecikme etkileri, Android'in SNTP uygulamasında zaman yanlışlığına en büyük katkıyı sağlayan faktördür. SNTP, simetrik ağ gecikmelerini varsayar; yani, isteğin ağ gecikmesi, yanıtın ağ gecikmesiyle aynıdır ve doğru zaman, ağ gidiş dönüşünün tam ortasında yer alır. Çoğu zaman ağ gidiş-dönüş süresi birkaç yüz milisaniye mertebesindedir ve kablolu bir ağda gecikme simetriğe yakındır, bu da kullanıcılar tarafından neredeyse algılanamayacak düzeyde yanlışlığa yol açar. Bununla birlikte, mobil veya telsiz telefon hizmetlerinde, bir ağ işlemine nispeten uzun, asimetrik gecikmelerin eklenebildiği ve daha fazla yanlışlığa yol açabildiği birkaç aşama vardır.
config_ntpTimeout
için AOSP varsayılan ayarı 5000
milisaniyeye ayarlandığında ve tüm ağ gecikmesi yalnızca gelen veya giden bacakta yoğunlaşmışsa maksimum teorik hata yaklaşık 2,5 saniyedir.
Genel sistem saatinin doğruluğu, Android cihazının bir zaman sinyali alındıktan sonra geçen zamanı doğru bir şekilde takip etme yeteneğinden de etkilenir. Bu, yalnızca ağ zaman tespiti için değil, Android'deki tüm zaman işleyişiyle ilgili bir sorundur ve time_detector
hizmetinin eski zaman önerilerini göz ardı etmesinin nedeni budur. network_time_update_service
hizmeti, time_detector
hizmetinin yeni zaman önerileriyle birlikte sağlanmasını sağlamak ve time_detector
hizmetinin daha düşük önceliğe ve genellikle daha düşük doğruluk oranına veya bazen telephony
gibi hatalı zaman kökenlerine geri dönmemesini sağlamak için config_ntpPollingInterval
aralığını kullanarak düzenli olarak yenilenir.
Otomatik zaman tespiti kullanıldığında, cihazın sistem saat doğruluğu, time_detector
hizmetinin diğer yapılandırmalarından (örneğin, saat ayarlanmadan önce bir zaman önerisinin mevcut sistem saatinden ne kadar farklı olması gerektiğini etkileyen sabitler ve işaretler gibi) etkilenebilir ( ServiceConfigAccessorImpl.java
).
Cihaz üreticileri önceki 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 ve daha sık ağ operasyonlarının güç tüketimi üzerindeki olası etkisinin, daha sık ancak daha küçük saat ayarlamalarının 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 zaman algılama yapılandırılmamışsa veya kullanıcı otomatik zaman algılamayı devre dışı bırakmışsa network_time_update_service
hizmeti tarafından elde edilen zaman aşağıdaki bileşenler tarafından kullanılmaya devam edilir:
-
SystemClock.currentNetworkTimeClock()
yöntemi. - Dahili platform fonksiyonları. Örneğin A-GPS, ağ zaman bilgisine sahip olduğunda bir GNSS'nin (konum) ilk tespitini daha hızlı yapabilir.
Hata ayıklama ve test etme
Aşağıdaki bölümde ağ zaman algılama özelliğinde hata ayıklama ve test etmeye yönelik kabuk komutları açıklanmaktadır.
network_time_update_service hizmetiyle etkileşim kurun
network_time_update_service
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