Zaman Kaynak Önceliği

Android çerçevesi, zaman senkronizasyonu için çeşitli zaman kaynakları kullanır. Bu sayfa, Ağ Zaman Protokolü (NTP) ve Ağ Kimliği ve Zaman Dilimi (NITZ) otomatik zaman kaynaklarına odaklanır. Android 12 veya sonraki sürümlerde varsayılan olarak, NTP, NITZ'den daha doğru ve güvenilir olduğundan, çerçeve zaman kaynağı olarak NTP'ye NITZ'ye öncelik verir. NTP'nin mevcut olmadığı durumlarda, çerçeve NITZ'e geri döner. Bu, platformun önceki sürümlerinden varsayılan önceliğin tersine çevrilmesidir. Android 11 ve önceki sürümlerde varsayılan olarak çerçeve, NTP yerine NITZ'ye öncelik verir.

Bu değişiklikle ilgili daha fazla ayrıntı için aşağıdaki AOSP yamaları bakın: 1563678 , 1513323 .

Zaman kaynağı önceliğini yapılandırma

Zaman kaynağı, belirli bir Android sürümü için varsayılan olarak önceliği yapılandırmak için, yapılandırmak config_autoTimeSourcesPriority anahtarı frameworks/base/core/res/res/values/config.xml yapı anda. Listede daha yüksek olan zaman kaynağından gelen zaman önerileri, listede daha düşük olan kaynaklara göre önceliklidir.

Yapılandırılabilir Android zaman kaynakları bulunur TimeDetectorStrategy.java . Aşağıdaki kaynaklar varsayılan olarak kullanım için yapılandırılmıştır:

  • Telefon (NITZ)
  • Ağ (NTP)

Test yapmak

NTP mevcut olmadığında (mobil veri ve Wi-Fi devre dışı bırakıldığında) cihazın NITZ kullandığını doğrulamak için aşağıdakileri yapın:

  1. DUT'ta çalışan bir SIM olduğundan emin olun
  2. Mobil verileri ve Wi-Fi'yi kapatın
  3. Hücre radyosunun kapalı olduğundan emin olmak için cihazı uçak moduna alın
  4. Otomatik zaman algılamayı kapat
  5. Saati manuel olarak gelecekte yanlış bir zaman değerine ayarlayın
  6. Cihazı yeniden başlat
  7. Otomatik zaman algılamayı aç
  8. Cihazı uçak modundan çıkarın

Bu adımlar, bir NITZ sinyali alınır alınmaz sistem saatinde bir değişikliği tetikler. Cihaz saatinin nasıl ayarlandığını kontrol etmek için aşağıdaki komutu çalıştırın:

adb shell dumpsys time_detector

Sistem saatinin NITZ kullandığını doğrulamak için komut çıktısında aşağıdakileri onaylayın:

  • mEnvironment.isAutoTimeDetectionEnabled() olduğu true .
  • mEnvironment.autoOriginPriorities() kaynaklar listesi düşük üzerinde daha fazla listesi alma öncelik ile kaynaklarıyla zaman kaynaklarının bir listesi yer almaktadır.
  • Time change log sistem saati, bir telefon öneri kullanılarak ayarlanır o bölüm gösterilmektedir.
  • Telephony suggestion history bölüm süresi önerileri içermektedir.
  • Network suggestion history bölüm boş.

Zaman önerileri Telephony suggestion history ve Network suggestion history bölümleri gerçeğin kaynağı defa kabul edilir. Cihaz internete bağlıysa ve SIM kartı varsa, hem NTP (ağ) hem de NITZ (telefon) kullanılarak öneriler oluşturulur. Bu test durumda, yalnızca Telephony suggestion history NTP devre dışı olduğu bölüm önerileri içermektedir.

Time change log bölüm cihazın sistem saati ve kullanılan öneri yapılan değişiklikleri kaydeder. Sistem saati içinde öncelik listesindeki zaman kaynaklarının sırasına göre ayarlanır config_autoTimeSourcesPriority tuşu. Ancak, öneri çok eski veya geçersizse daha yüksek öncelikli bir kaynaktan gelen öneriler yoksayılabilir. Ayrıca, en yüksek öncelikli geçerli öneri, cihazın mevcut sistem saatiyle birkaç saniye içinde eşleşirse, saat değişmez. Bu test durumda, sürece önerileri güncelliğini yitirmiş değil gibi, sistem saati önerilerden birini kullanılarak ayarlanır Telephony suggestion history .

Aşağıda, NTP kullanılamadığında cihazın NITZ kullanmaya geri döndüğü bir çıktı örneği verilmiştir.

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=73059
  mEnvironment.systemClockMillis()=1614186767818
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-02-24T15:44:15Z(1614181455000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    66261 / 2021-02-24T17:12:41.020Z - Set system clock using time=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000} cause=Found good telephony suggestion., bestTelephonySuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}, detectionReason=New telephony time suggested. timeSuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]} elapsedRealtimeMillis=66259 newSystemClockMillis=1614186761019
  Telephony suggestion history:
    key idx: 0=0
    val idx: 0=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      Historic values=[
        0@PT1M6.258S: TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      ]
  Network suggestion history:
    {Empty}
  Gnss suggestion history:
    {Empty}
  External suggestion history:
    {Empty}

Test senaryosundaki çıktıyla karşılaştırma olarak referans olması için aşağıda, cihazın hem NTP hem de NITZ zaman kaynaklarından zaman önerileri aldığı tipik bir çıktı örneği verilmiştir.

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=302926
  mEnvironment.systemClockMillis()=1614186997685
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-02-24T15:44:15Z(1614181455000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    66261 / 2021-02-24T17:12:41.020Z - Set system clock using time=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000} cause=Found good telephony suggestion., bestTelephonySuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}, detectionReason=New telephony time suggested. timeSuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]} elapsedRealtimeMillis=66259 newSystemClockMillis=1614186761019
  Telephony suggestion history:
    key idx: 0=0
    val idx: 0=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      Historic values=[
        0@PT1M6.258S: TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      ]
  Network suggestion history:
    0@PT4M4.04S: NetworkTimeSuggestion{mUtcTime=TimestampedValue{mReferenceTimeMillis=244038, mValue=1614186939242}, mDebugInfo=[Origin: NetworkTimeUpdateService. event=3]}
  Gnss suggestion history:
    {Empty}
  External suggestion history:
    {Empty}