Perangkat Android secara otomatis akan mencoba memperoleh waktu Unix epoch yang benar dari sumber jaringan. Android menggunakan protokol SNTP, yang menggunakan protokol UDP, untuk mendapatkan informasi waktu.
Komponen yang dijelaskan di halaman ini adalah bagian dari deteksi waktu otomatis
yang disebut sebagai asal waktu jaringan. Sinyal waktu dari
server waktu jaringan dapat digunakan untuk
mengatur jam sistem perangkat Android ketika
deteksi waktu otomatis didukung di perangkat dan time_detector
layanan dikonfigurasi untuk menggunakannya.
Secara default, Android menggunakan asal waktu jaringan sebagai titik awal origin deteksi waktu otomatis.
Sistem deteksi waktu jaringan
Layanan network_time_update_service
yang berjalan di server sistem Android
menerapkan sistem
deteksi waktu jaringan. Layanan secara berkala menggunakan
SNTP untuk mendapatkan
sinyal waktu dari server. Layanan ini juga memantau jaringan
konektivitas dan memicu refresh waktu ketika tidak ada sinyal waktu terbaru yang tersedia
setelah koneksi buruk dalam waktu lama.
Layanan network_time_update_service
mencoba mendapatkan sinyal waktu
setelah {i>booting<i} dan ketika
konektivitas jaringan pertama kali dibuat. Tujuan
{i>service<i} kemudian mencoba untuk menjaga
sinyal terbaru yang ditahannya tetap segar. Hal ini menyeimbangkan
perangkat Android individual dengan
beban yang cukup besar yang dapat
yang dihasilkan oleh banyak perangkat Android di
seluruh dunia yang memperbarui waktu mereka.
Menggunakan API internal, network_time_update_service
mengirimkan waktu jaringan
saran ke layanan time_detector
. Platform Android lain
kemudian menggunakan saran
waktu jaringan ini.
Setelah menerima saran dari asal waktu jaringan, time_detector
layanan tersebut akan menentukan apakah akan
memperbarui jam sistem sesuai dengan
aturan prioritas yang dikonfigurasi.
Untuk mengonfigurasi sistem deteksi waktu otomatis agar menggunakan asal jaringan
untuk menyetel jam sistem secara otomatis, gunakan metode
File konfigurasi server sistem core/res/res/values/config.xml
. Pastikan atribut
nilai network
dimuat dalam config_autoTimeSourcesPriority
dalam kolom
posisi Anda. Untuk mengetahui detailnya, lihat
Prioritas Sumber Waktu.
Konfigurasi perangkat
Bagian ini menjelaskan cara produsen perangkat dapat mengonfigurasi jaringan sistem deteksi waktu.
Konfigurasi AOSP dasar berada di
frameworks/base/core/res/res/values/config.xml
:
Kunci konfigurasi | Nilai AOSP | Deskripsi |
---|---|---|
config_ntpRetry |
3 |
Setelah gagal memuat ulang, ini adalah berapa kali sistem mencoba
polling waktu jaringan dengan interval polling NTP yang lebih pendek
(config_ntpPollingIntervalShorter ), sebelum melakukan pencadangan dan menggunakan
interval polling normal (config_ntpPollingInterval ). Sebuah nilai
kurang dari 0 berarti sistem akan mencoba kembali polling pada NTP yang lebih pendek
interval polling hingga berhasil dimuat ulang. |
config_ntpPollingInterval |
64800000 (18 jam) |
Interval polling waktu jaringan normal dalam milidetik. |
config_ntpPollingIntervalShorter |
60000 (1 menit) |
Interval polling waktu jaringan percobaan ulang dalam milidetik. Digunakan saat pembaruan waktu gagal. |
config_ntpServers |
Satu entri: ntp://time.android.com |
digunakan server NTP untuk
mendapatkan waktu yang akurat. Item harus berbentuk:
ntp://<host>[:port] .
Ini bukan skema URI IANA yang terdaftar. |
config_ntpTimeout |
5000 | Waktu menunggu respons server NTP dalam milidetik sebelum waktu tunggu. |
Server
Secara default, AOSP menggunakan server waktu di time.android.com
, yang merupakan alias untuk
NTP Publik Google. Layanan ini memiliki
tanpa SLA. Untuk mengetahui detailnya, lihat
FAQ NTP Publik Google.
Dukungan beberapa server
Untuk Android 14 dan yang lebih baru, framework ini mendukung
beberapa server NTP. Hal ini mendukung situasi
ketika perangkat
didistribusikan secara global dengan satu konfigurasi, tetapi akses ke server
seperti time.android.com
dibatasi di tempat tertentu.
Algoritma mencoba setiap server yang ditentukan dalam config_ntpServers
kunci konfigurasi. Ketika menemukan yang merespons, sistem terus menggunakan
server itu sampai gagal di-refresh
atau perangkat dimulai ulang.
Akurasi
Sinkronisasi waktu jaringan default Android menggunakan SNTP dengan kueri satu kali kira-kira sekali sehari untuk memastikan selalu ada sinyal waktu terbaru.
Efek latensi jaringan adalah kontributor terbesar terhadap ketidakakuratan waktu dengan Implementasi SNTP Android. SNTP mengasumsikan penundaan jaringan simetris, yaitu, latensi jaringan untuk permintaan sama dengan latensi jaringan untuk jawaban, dan waktu yang tepat terletak di tengah-tengah itu, jaringan bolak-balik. Sering kali, waktu dua arah jaringan berada dalam urutan beberapa seratus milidetik dan pada jaringan berkabel, latensinya mendekati simetris, yang menyebabkan tingkat ketidakakuratan yang hampir tidak terlihat oleh pengguna. Namun, dengan telepon seluler atau radio ada beberapa tahap di mana relatif lama, penundaan asimetris dapat dimasukkan ke dalam transaksi jaringan yang berujung pada ketidakakuratan yang lebih besar.
Dengan setelan default AOSP untuk config_ntpTimeout
yang ditetapkan ke 5000
milidetik,
dan jika semua latensi jaringan hanya
terkonsentrasi pada aliran masuk atau keluar,
kaki, maksimum kesalahan teoritis adalah sekitar 2,5 detik.
Akurasi jam sistem secara keseluruhan juga dipengaruhi oleh kemampuan perangkat Android
untuk melacak waktu berlalu secara akurat
setelah mendapatkan sinyal waktu. Ini adalah
terhadap semua pengaturan waktu di Android, bukan
hanya deteksi waktu jaringan, dan
mengapa layanan time_detector
mengabaikan saran lama. Tujuan
Layanan network_time_update_service
dimuat ulang secara rutin menggunakan
Interval config_ntpPollingInterval
untuk mempertahankan layanan time_detector
dilengkapi dengan saran waktu terbaru dan untuk memastikan bahwa time_detector
layanan tidak kembali ke prioritas yang lebih
rendah dan sering kali memiliki akurasi yang lebih rendah atau
terkadang kesalahan asal waktu, seperti telephony
.
Saat deteksi waktu otomatis digunakan, akurasi jam sistem perangkat dapat
terpengaruh oleh konfigurasi lain dari layanan time_detector
, seperti
yang memengaruhi konstanta dan penanda yang memengaruhi seberapa berbedanya saran waktu
waktu jam sistem saat ini sebelum jam disesuaikan
(ServiceConfigAccessorImpl.java
).
Produsen perangkat dapat mengubah akurasi menggunakan konfigurasi sebelumnya opsi dan konstanta. Tetapi penting untuk menyadari batasan-batasan dari implementasi SNTP platform, dan potensi dampak terhadap konsumsi daya dari operasi jaringan yang lebih sering, dampak ke aplikasi yang berjalan di perangkat dari lebih sering tetapi lebih kecil, dan efek pada beban server.
Penggunaan waktu jaringan lainnya
Jika deteksi waktu otomatis yang menggunakan asal network
tidak dikonfigurasi atau jika
pengguna telah menonaktifkan deteksi waktu otomatis, yakni waktu yang diperoleh
Layanan network_time_update_service
masih digunakan oleh komponen berikut:
- Tujuan
SystemClock.currentNetworkTimeClock()
. - Fungsi platform internal. Misalnya, A-GPS dapat menemukan GNSS (lokasi) pertama-tama memperbaiki lebih cepat ketika perangkat memiliki informasi waktu jaringan.
Proses debug dan pengujian
Bagian berikut menjelaskan perintah shell untuk proses debug dan pengujian fitur deteksi waktu jaringan.
Berinteraksi dengan layanan network_time_update_service
Untuk membuang status network_time_update_service
saat ini, gunakan:
adb shell cmd network_time_update_service dump
Untuk melihat serangkaian opsi command line yang dapat membantu pengujian, gunakan:
adb shell cmd network_time_update_service help