Phát hiện thời gian mạng

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