Perangkat Android secara 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 jika 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 menggunakan SNTP secara berkala untuk mendapatkan sinyal waktu dari server. Layanan ini juga memantau konektivitas jaringan dan memicu pembaruan waktu jika tidak ada sinyal waktu terbaru yang tersedia setelah periode konektivitas yang buruk dalam waktu yang 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 dimilikinya agar tetap baru. Layanan ini menyeimbangkan kebutuhan setiap perangkat Android dengan beban besar yang dapat dihasilkan oleh banyak perangkat Android di seluruh dunia yang memperbarui waktu mereka.
Dengan 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
menentukan apakah akan memperbarui jam sistem sesuai dengan
aturan prioritas yang 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
ada dalam config_autoTimeSourcesPriority
pada 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 ada di
frameworks/base/core/res/res/values/config.xml
:
Kunci konfigurasi | Nilai AOSP | Deskripsi |
---|---|---|
config_ntpRetry |
3 |
Setelah gagal memuat ulang, ini adalah jumlah percobaan sistem untuk
melakukan polling waktu jaringan dengan interval polling NTP yang lebih singkat
(config_ntpPollingIntervalShorter ), sebelum mundur dan menggunakan
interval polling normal (config_ntpPollingInterval ). Nilai
kurang dari 0 berarti sistem mencoba lagi polling pada interval
polling NTP yang lebih singkat hingga berhasil memuat 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 |
Server NTP yang akan digunakan untuk mendapatkan waktu yang akurat. Item harus dalam bentuk:
ntp://<host>[:port] .
Ini bukan skema URI IANA terdaftar. |
config_ntpTimeout |
5000 | Waktu untuk menunggu 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 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
. Saat menemukan server yang merespons, sistem akan terus menggunakan server tersebut hingga gagal memuat ulang atau perangkat dimulai ulang.
Akurasi
Sinkronisasi waktu jaringan default Android menggunakan SNTP dengan satu kueri waktu sekitar sekali sehari untuk mencoba memastikan bahwa Android selalu memiliki sinyal waktu terbaru.
Efek latensi jaringan adalah kontributor terbesar terhadap ketidakakuratan waktu dengan 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 pulang pergi jaringan tersebut. Sering kali, waktu perjalanan pulang pergi jaringan berorde beberapa ratus milidetik dan pada jaringan kabel, latensi hampir simetris, sehingga menyebabkan tingkat ketidakakuratan yang hampir tidak dapat dirasakan oleh pengguna. Namun, dengan telepon seluler atau radio, ada beberapa tahap di mana penundaan asimetris yang relatif lama dapat dimasukkan ke dalam transaksi jaringan yang menyebabkan ketidakakuratan yang lebih besar.
Dengan setelan default AOSP untuk config_ntpTimeout
ditetapkan ke 5000
milidetik, dan jika semua latensi jaringan hanya terkonsentrasi pada segmen masuk atau keluar, error teoretis maksimum adalah sekitar 2,5 detik.
Akurasi clock sistem secara keseluruhan juga dipengaruhi oleh kemampuan perangkat Android
untuk melacak waktu yang telah berlalu secara akurat setelah sinyal waktu diperoleh. Hal ini menjadi
masalah dengan semua pencatatan waktu di Android, bukan hanya deteksi waktu jaringan, dan
itulah sebabnya layanan time_detector
mengabaikan saran waktu lama. Layanan
network_time_update_service
diperbarui secara rutin menggunakan interval
config_ntpPollingInterval
untuk terus menyediakan saran waktu baru bagi layanan time_detector
dan memastikan bahwa layanan time_detector
tidak kembali ke asal waktu yang berprioritas lebih rendah dan sering kali berakurasi lebih rendah atau terkadang salah, seperti telephony
.
Jika deteksi waktu otomatis digunakan, akurasi jam sistem perangkat dapat terpengaruh oleh konfigurasi layanan time_detector
lainnya, seperti konstanta dan flag yang memengaruhi seberapa jauh saran waktu harus berbeda 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 penerapan SNTP platform, dan potensi dampak pada konsumsi daya dari operasi jaringan yang lebih sering, dampak pada aplikasi yang berjalan di perangkat dari penyesuaian clock yang lebih sering tetapi lebih kecil, dan efek pada beban server.
Penggunaan lain waktu jaringan
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 pertama GNSS (lokasi) lebih cepat jika 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 mengekspor 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