Perangkat Android akan otomatis mencoba mendapatkan waktu epoch Unix 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 sistem deteksi waktu otomatis
yang disebut sebagai asal waktu jaringan. Sinyal waktu dari
server waktu jaringan dapat digunakan untuk menyetel jam sistem perangkat Android saat
deteksi waktu otomatis didukung di perangkat dan layanan
time_detector
dikonfigurasi untuk menggunakannya.
Secara default, Android menggunakan asal waktu jaringan sebagai asal deteksi waktu otomatis utama.
Sistem deteksi waktu jaringan
Layanan network_time_update_service
yang berjalan di server sistem Android
mengimplementasikan sistem deteksi waktu jaringan. Layanan ini secara berkala menggunakan
SNTP untuk mendapatkan sinyal waktu dari server. Layanan ini juga memantau konektivitas jaringan
dan memicu pembaruan waktu saat tidak ada sinyal waktu terbaru yang tersedia
setelah periode konektivitas yang buruk dalam waktu lama.
Layanan network_time_update_service
mencoba mendapatkan sinyal waktu
setelah booting dan saat konektivitas jaringan pertama kali dibuat. Layanan
kemudian mencoba mempertahankan sinyal terbaru yang disimpannya. Fitur ini menyeimbangkan
kebutuhan setiap perangkat Android dengan beban substansial yang dapat
dihasilkan oleh banyak perangkat Android di seluruh dunia yang memperbarui waktunya.
Menggunakan API internal, network_time_update_service
mengirimkan saran waktu
jaringan ke layanan time_detector
. Komponen platform Android
lainnya kemudian menggunakan saran waktu jaringan ini.
Setelah menerima saran dari asal waktu jaringan, layanan time_detector
akan menentukan apakah akan mengupdate jam sistem sesuai dengan
aturan prioritas yang telah dikonfigurasi.
Untuk mengonfigurasi sistem deteksi waktu otomatis agar menggunakan saran asal jaringan
untuk menyetel jam sistem secara otomatis, gunakan
file konfigurasi server sistem core/res/res/values/config.xml
. Pastikan
nilai network
dimuat di config_autoTimeSourcesPriority
di posisi yang
diinginkan. Untuk mengetahui detailnya, lihat
Prioritas Sumber Waktu.
Konfigurasi perangkat
Bagian ini menjelaskan cara produsen perangkat dapat mengonfigurasi sistem deteksi waktu jaringan.
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 frekuensi sistem mencoba
polling waktu jaringan dengan interval polling NTP yang lebih singkat
(config_ntpPollingIntervalShorter ), sebelum mundur dan menggunakan
interval polling normal (config_ntpPollingInterval ). Nilai
yang kurang dari 0 berarti sistem mencoba ulang polling pada interval polling
NTP yang lebih singkat 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 refresh waktu gagal. |
config_ntpServers |
Satu entri: ntp://time.android.com |
digunakan server NTP untuk
mendapatkan waktu yang akurat. Item harus dalam bentuk:
ntp://<host>[:port] .
Ini bukan skema URI IANA terdaftar. |
config_ntpTimeout |
5000 | Waktu tunggu respons server NTP dalam milidetik sebelum waktu tunggu habis. |
Server
Secara default, AOSP menggunakan server waktu di time.android.com
, yang merupakan alias untuk
NTP Publik Google. Layanan ini tidak
memiliki SLA. Untuk mengetahui detailnya, lihat
FAQ NTP Publik Google.
Dukungan beberapa server
Untuk Android 14 dan yang lebih tinggi, framework ini mendukung
beberapa server NTP. Hal ini mendukung situasi saat 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 kunci konfigurasi config_ntpServers
. Jika menemukan server yang merespons, sistem akan terus menggunakan
server tersebut hingga gagal dimuat ulang atau perangkat dimulai ulang.
Akurasi
Sinkronisasi waktu jaringan default Android menggunakan SNTP dengan satu kueri waktu kira-kira sekali sehari untuk mencoba memastikannya selalu memiliki sinyal waktu terbaru.
Efek latensi jaringan adalah kontributor terbesar terhadap ketidakakuratan waktu dalam penerapan SNTP Android. SNTP mengasumsikan penundaan jaringan simetris, yaitu, latensi jaringan untuk permintaan sama dengan latensi jaringan untuk respons, dan waktu yang benar terletak tepat di tengah perjalanan bolak-balik jaringan tersebut. Sering kali, waktu round-trip jaringan berkisar beberapa ratus milidetik dan pada jaringan berkabel, latensi mendekati simetris, sehingga menyebabkan tingkat ketidakakuratan yang hampir tidak terlihat oleh pengguna. Namun, dengan telepon seluler atau radio, ada beberapa tahap saat penundaan asimetris yang relatif lama dapat disisipkan ke dalam transaksi jaringan yang menyebabkan ketidakakuratan yang lebih besar.
Dengan setelan default AOSP untuk config_ntpTimeout
yang ditetapkan ke 5000
milidetik,
dan jika semua latensi jaringan hanya terkonsentrasi pada segmen masuk atau
keluar, error teoretis maksimumnya adalah sekitar 2,5 detik.
Akurasi jam sistem secara keseluruhan juga dipengaruhi oleh kemampuan perangkat Android
untuk melacak waktu berlalu secara akurat setelah sinyal waktu diperoleh. Hal ini
merupakan masalah dengan semua pencatatan waktu di Android, bukan hanya deteksi waktu jaringan, dan
merupakan alasan layanan time_detector
mengabaikan saran waktu lama. Layanan
network_time_update_service
diperbarui secara teratur menggunakan
interval config_ntpPollingInterval
agar layanan time_detector
tetap
disediakan dengan saran waktu yang baru dan untuk memastikan bahwa layanan time_detector
tidak kembali ke prioritas yang lebih rendah dan sering kali memiliki akurasi yang lebih rendah atau
asal waktu yang terkadang salah seperti telephony
.
Saat deteksi waktu otomatis digunakan, akurasi jam sistem perangkat dapat
dipengaruhi oleh konfigurasi lain dari layanan time_detector
, seperti
konstanta dan flag yang memengaruhi perbedaan saran waktu dari
waktu jam sistem saat ini sebelum jam disesuaikan
(ServiceConfigAccessorImpl.java
).
Produsen perangkat dapat mengubah akurasi menggunakan opsi dan konstanta konfigurasi sebelumnya. Namun, penting untuk mengetahui batasan implementasi SNTP platform, dan potensi dampaknya terhadap konsumsi daya dari operasi jaringan yang lebih sering, dampak terhadap aplikasi yang berjalan di perangkat dari penyesuaian jam yang lebih sering tetapi lebih kecil, dan pengaruhnya terhadap beban server.
Penggunaan waktu jaringan lainnya
Jika deteksi waktu otomatis menggunakan origin network
tidak dikonfigurasi atau jika
pengguna telah menonaktifkan deteksi waktu otomatis, waktu yang diperoleh oleh
layanan network_time_update_service
masih digunakan oleh komponen berikut:
- Metode
SystemClock.currentNetworkTimeClock()
. - Fungsi platform internal. Misalnya, A-GPS dapat menemukan perbaikan GNSS (lokasi) terlebih dahulu dengan lebih cepat jika A-GPS memiliki informasi waktu jaringan.
Proses debug dan pengujian
Bagian berikut menjelaskan perintah shell untuk men-debug dan menguji 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 kumpulan opsi command line yang dapat membantu pengujian, gunakan:
adb shell cmd network_time_update_service help