Zaman kaynağı önceliği

Android çerçevesi, saat senkronizasyonu için çeşitli saat kaynakları kullanır. Bu sayfada, Ağ Saat Protokolü (NTP) ve Ağ Kimliği ve Saat Dilimi (NITZ) otomatik saat kaynakları ele alınmaktadır. Android 12 veya sonraki sürümlerde varsayılan olarak çerçeve, NTP NITZ'den daha doğru ve güvenilir olduğu için zaman kaynağı olarak NITZ'ye göre NTP'ye öncelik verir. NTP'nin kullanılamadığı durumlarda, çerçeve NITZ'ye geri döner. Bu, platformun önceki sürümlerindeki varsayılan önceliğin tersine çevrilmesidir. Çerçeve, Android 11 ve önceki sürümlerde varsayılan olarak NITZ'ye öncelik verir. NTP üzerinden

Bu değişiklik hakkında daha fazla bilgi için aşağıdaki AOSP yamalarını inceleyin: 1563678, 1513323.

Zaman kaynağı önceliğini yapılandırın

Belirli bir Android sürümü için varsayılan olarak hangi zaman kaynağının öncelikli olacağını yapılandırmak üzere, derleme sırasında frameworks/base/core/res/res/values/config.xml'da config_autoTimeSourcesPriority anahtarını yapılandırın. Saat listede daha yukarıda olan zaman kaynağından gelen öneriler önceliklidir listede daha alt kaynaklardaki kaynaklara göre filtrelenir.

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

  • Telefon (NITZ)
  • Ağ (NTP)

Test

NTP kullanılamadığında cihazın NITZ kullandığını doğrulamak için (mobil veri ve kablosuz ağ devre dışı bırakıldığında) aşağıdakileri yapın:

  1. DUT içinde çalışan bir SIM olduğundan emin olun
  2. Mobil veri ve kablosuz bağlantıyı kapat
  3. Hücresel radyonun kapalı olduğundan emin olmak için cihazı uçak moduna alın
  4. Otomatik zaman algılamayı kapatma
  5. Gelecekte saati manuel olarak yanlış bir saat değerine ayarlama
  6. Cihazı yeniden başlatma
  7. Otomatik saat algılamayı etkinleştirme
  8. Cihazı uçak modundan çıkarın

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

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() true.
  • mEnvironment.autoOriginPriorities(), listede daha yukarıda yer alan kaynakların listede daha aşağıda yer alan kaynaklara göre öncelikli olduğu bir zaman kaynağı listesi içerir.
  • Time change log bölümünde, sistem saatinin bir telefon önerisi kullanılarak ayarlandığı gösterilir.
  • Telephony suggestion history bölümünde zaman önerileri yer alır.
  • Network suggestion history bölümü boş.

Telephony suggestion history ve zaman önerilerinde Network suggestion history bölümler şunun için bilgi kaynağı olarak kabul edilir: gerekir. Cihaz internete bağlıysa ve SIM kartı varsa öneriler hem NTP (ağ) hem de NITZ (telefon) kullanılarak oluşturulur. Bu test örneğinde yalnızca Telephony suggestion history bölümü öneriler içerir çünkü NTP devre dışı.

Time change log bölümü, cihazın saat dilimini ve kullanılan öneriyi görürsünüz. Sistem saati zaman kaynaklarının sırası config_autoTimeSourcesPriority tuşuna basın. Ancak, Öneri çok eski veya geçersizse yüksek öncelikli kaynak 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ştirilmez. Bu test durumunda, öneriler güncel olmadığı sürece sistem saati Telephony suggestion history önerilerinden biri kullanılarak ayarlanır.

Aşağıda, cihazın otomatik olarak NTP kullanılamadığında NITZ.

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 ekran görüntüsünde olduğu hem NTP hem de NITZ zaman kaynaklarından zaman önerileri alır.

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}