Thiết bị Android tự động tìm cách thu thập đúng thời gian bắt đầu của hệ thống Unix từ nguồn mạng. Android sử dụng giao thức SNTP, giao thức này dùng giao thức UDP, để có được thông tin về thời gian.
Các thành phần được mô tả trên trang này là một phần của tính năng phát hiện thời gian tự động
được gọi là nguồn gốc thời gian mạng. Tín hiệu thời gian từ
máy chủ thời gian mạng có thể được dùng để đặt đồng hồ hệ thống của thiết bị Android khi
tính năng tự động phát hiện thời gian được hỗ trợ trên thiết bị và time_detector
đã định cấu hình để sử dụng nguồn cấp dữ liệu đó.
Theo mặc định, Android sử dụng nguồn gốc thời gian mạng làm nguồn chính nguồn gốc phát hiện thời gian tự động.
Hệ thống phát hiện thời gian mạng
Dịch vụ network_time_update_service
chạy trong máy chủ hệ thống Android
triển khai hệ thống phát hiện thời gian mạng. Dịch vụ sử dụng định kỳ
SNTP để nhận tín hiệu thời gian từ máy chủ. Dịch vụ này cũng giám sát mạng
khả năng kết nối và kích hoạt chế độ làm mới thời gian khi không có tín hiệu về thời gian gần đây
sau thời gian dài kết nối kém.
Dịch vụ network_time_update_service
cố gắng nhận tín hiệu thời gian
sau khi khởi động và khi kết nối mạng được thiết lập lần đầu tiên. Chiến lược phát hành đĩa đơn
khi đó, dịch vụ đó sẽ cố gắng duy trì tín hiệu mới nhất. Chiến dịch này cân bằng giữa
nhu cầu của từng thiết bị Android với tải trọng đáng kể có thể
được nhiều thiết bị Android trên toàn thế giới tạo ra để làm mới thời gian.
Khi sử dụng API nội bộ, network_time_update_service
sẽ gửi thời gian mạng
các đề xuất cho dịch vụ time_detector
. Nền tảng Android khác
sau đó sử dụng các đề xuất về thời gian mạng này.
Sau khi nhận được đề xuất từ nguồn gốc thời gian mạng, time_detector
Dịch vụ này xác định xem có cập nhật đồng hồ hệ thống theo
đã định cấu hình quy tắc ưu tiên.
Cách định cấu hình hệ thống phát hiện thời gian tự động để sử dụng nguồn gốc của mạng
để đặt đồng hồ hệ thống tự động, hãy sử dụng
core/res/res/values/config.xml
là tệp cấu hình máy chủ hệ thống. Đảm bảo rằng
giá trị network
có trong config_autoTimeSourcesPriority
trong thứ tự mong muốn
vị trí. Để biết thông tin chi tiết, hãy xem
Mức độ ưu tiên nguồn thời gian.
Cấu hình thiết bị
Phần này mô tả cách nhà sản xuất thiết bị có thể định cấu hình mạng phát hiện thời gian.
Cấu hình AOSP cơ sở ở
frameworks/base/core/res/res/values/config.xml
:
Khoá cấu hình | Giá trị AOSP (Dự án nguồn mở Android) | Mô tả |
---|---|---|
config_ntpRetry |
3 |
Sau khi không làm mới được, đây là số lần hệ thống thử
thăm dò thời gian mạng với khoảng thời gian thăm dò NTP ngắn hơn
(config_ntpPollingIntervalShorter ), trước khi tắt và sử dụng
khoảng thời gian thăm dò bình thường (config_ntpPollingInterval ). Một giá trị
nhỏ hơn 0 có nghĩa là hệ thống thử lại thăm dò tại NTP ngắn hơn
khoảng thời gian thăm dò cho đến khi có thể làm mới thành công. |
config_ntpPollingInterval |
64800000 (18 giờ) |
Khoảng thời gian thăm dò thời gian mạng thông thường tính bằng mili giây. |
config_ntpPollingIntervalShorter |
60000 (1 phút) |
Khoảng thời gian thăm dò thời gian mạng thử lại tính bằng mili giây. Được dùng khi không làm mới được thời gian. |
config_ntpServers |
Một mục nhập duy nhất: ntp://time.android.com |
Máy chủ NTP để sử dụng nhằm có được thời gian chính xác. Các mục phải ở dạng:
ntp://<host>[:port] .
Đây không phải là một giao thức URI IANA đã được đăng ký. |
config_ntpTimeout |
5000 | Thời gian để chờ phản hồi của máy chủ NTP tính bằng mili giây trước khi hết thời gian chờ. |
Máy chủ
Theo mặc định, AOSP sử dụng máy chủ thời gian tại time.android.com
, là bí danh của
NTP công khai của Google. Dịch vụ này có
không có SLA. Để biết chi tiết, hãy xem
Câu hỏi thường gặp về NTP công khai của Google.
Hỗ trợ nhiều máy chủ
Đối với Android 14 trở lên, khung này hỗ trợ
nhiều máy chủ NTP. Tính năng này hỗ trợ trường hợp thiết bị
được phân phối trên toàn cầu với một cấu hình duy nhất, nhưng có quyền truy cập vào máy chủ
chẳng hạn như time.android.com
bị hạn chế ở một số địa điểm.
Thuật toán sẽ thử từng máy chủ được chỉ định trong config_ntpServers
khoá cấu hình. Khi tìm thấy một ứng dụng phản hồi, hệ thống sẽ tiếp tục sử dụng
máy chủ đó cho đến khi không làm mới được hoặc thiết bị khởi động lại.
Mức độ chính xác
Tính năng đồng bộ hoá thời gian mạng mặc định của Android sử dụng SNTP với một truy vấn một lần khoảng một lần mỗi ngày để cố gắng đảm bảo thiết bị luôn có tín hiệu thời gian gần đây.
Ảnh hưởng đến độ trễ mạng là yếu tố lớn nhất khiến thời gian không chính xác Triển khai SNTP của Android. SNTP giả định độ trễ mạng đối xứng, tức là độ trễ mạng cho yêu cầu cũng giống như độ trễ mạng cho và thời gian chính xác nằm chính giữa khứ hồi mạng. Thông thường, thời gian khứ hồi của mạng được sắp xếp theo thứ tự vài mili giây và trên mạng có dây, độ trễ gần đạt đối xứng, dẫn đến mức độ không chính xác mà gần như không thể nhận thấy được người dùng. Tuy nhiên, với điện thoại di động hoặc điện thoại vô tuyến, có một số giai đoạn trong đó tương đối dài, độ trễ bất đối xứng có thể được chèn vào giao dịch mạng khiến thông tin không chính xác hơn.
Với chế độ cài đặt mặc định của AOSP (Dự án nguồn mở Android) cho config_ntpTimeout
được đặt thành 5000
mili giây,
và nếu tất cả độ trễ mạng chỉ tập trung vào thư đến hoặc thư đi
chân, sai số lý thuyết tối đa là khoảng 2,5 giây.
Độ chính xác tổng thể của đồng hồ hệ thống cũng chịu ảnh hưởng của khả năng của thiết bị Android
để theo dõi thời gian đã trôi qua một cách chính xác sau khi nhận được tín hiệu thời gian. Đây là một
mối quan tâm về tất cả tính năng chấm công trên Android, chứ không chỉ cách phát hiện thời gian mạng và
lý do dịch vụ time_detector
bỏ qua các đề xuất cũ. Chiến lược phát hành đĩa đơn
Dịch vụ network_time_update_service
được làm mới thường xuyên bằng
Khoảng thời gian config_ntpPollingInterval
để duy trì dịch vụ time_detector
cung cấp đề xuất về thời gian mới và để đảm bảo rằng time_detector
thì dịch vụ đó không quay lại có mức độ ưu tiên thấp hơn và thường có độ chính xác thấp hơn hoặc
nguồn thời gian đôi khi không chính xác, chẳng hạn như telephony
.
Khi bạn sử dụng tính năng tự động phát hiện thời gian, độ chính xác của đồng hồ hệ thống của thiết bị có thể tăng
chịu ảnh hưởng của các cấu hình khác của dịch vụ time_detector
, chẳng hạn như
hằng số và cờ ảnh hưởng đến sự khác biệt của đề xuất thời gian
thời gian trên đồng hồ hiện tại của hệ thống trước khi đồng hồ được điều chỉnh
(ServiceConfigAccessorImpl.java
).
Nhà sản xuất thiết bị có thể sửa đổi độ chính xác bằng cách sử dụng cấu hình trước đó tuỳ chọn và hằng số. Nhưng điều quan trọng là phải nhận thức được những hạn chế của việc triển khai SNTP của nền tảng và tác động tiềm ẩn đối với mức tiêu thụ điện năng từ các hoạt động mạng thường xuyên hơn, tác động đến các ứng dụng chạy trên thiết bị từ thường xuyên hơn nhưng nhỏ hơn nhưng lại ảnh hưởng đến tải của máy chủ.
Các cách sử dụng thời gian mạng khác
Nếu tính năng phát hiện thời gian tự động bằng nguồn gốc network
chưa được định cấu hình hoặc
người dùng đã tắt tính năng phát hiện thời gian tự động, thời gian mà
Dịch vụ network_time_update_service
vẫn được các thành phần sau sử dụng:
- Chiến lược phát hành đĩa đơn
SystemClock.currentNetworkTimeClock()
. - Các chức năng nền tảng nội bộ. Ví dụ: A-GPS có thể định vị GNSS (vị trí) trước tiên sẽ khắc phục nhanh hơn khi có thông tin về thời gian mạng.
Gỡ lỗi và thử nghiệm
Phần sau đây mô tả các lệnh shell để gỡ lỗi và kiểm thử phát hiện thời gian mạng.
Tương tác với dịch vụ network_time_update_service
Để kết xuất trạng thái hiện tại của network_time_update_service
, hãy sử dụng:
adb shell cmd network_time_update_service dump
Để xem tập hợp các tuỳ chọn dòng lệnh có thể hỗ trợ kiểm thử, hãy sử dụng:
adb shell cmd network_time_update_service help