อุปกรณ์ Android จะพยายามรับเวลา Unix Epoch ที่ถูกต้องจากแหล่งที่มาของเครือข่ายโดยอัตโนมัติ Android ใช้โปรโตคอล SNTP ซึ่งใช้โปรโตคอล UDP เพื่อรับข้อมูลเวลา
คอมโพเนนต์ที่อธิบายไว้ในหน้านี้เป็นส่วนหนึ่งของระบบการตรวจหาเวลาอัตโนมัติ
ที่เรียกว่าแหล่งที่มาของเวลาในเครือข่าย สามารถใช้สัญญาณเวลาจากเซิร์ฟเวอร์เวลาของเครือข่าย
เพื่อตั้งค่านาฬิกาของระบบในอุปกรณ์ Android เมื่ออุปกรณ์รองรับการตรวจหาเวลา
อัตโนมัติและมีการกำหนดค่าบริการ time_detector
ให้ใช้สัญญาณเวลาดังกล่าว
โดยค่าเริ่มต้น Android จะใช้แหล่งที่มาของเวลาเครือข่ายเป็นแหล่งที่มาหลักในการตรวจหาเวลาอัตโนมัติ
ระบบตรวจหาเวลาเครือข่าย
network_time_update_service
บริการที่ทำงานในเซิร์ฟเวอร์ระบบ Android
จะใช้ระบบตรวจหาเวลาของเครือข่าย บริการนี้จะใช้ SNTP เป็นระยะๆ
เพื่อรับสัญญาณเวลาจากเซิร์ฟเวอร์ นอกจากนี้ บริการยังตรวจสอบการเชื่อมต่อเครือข่าย
และทริกเกอร์การรีเฟรชเวลาเมื่อไม่มีสัญญาณเวลาล่าสุด
หลังจากช่วงเวลาที่การเชื่อมต่อไม่ดีเป็นเวลานาน
network_time_update_service
บริการจะพยายามรับสัญญาณเวลาหลังจากบูตและเมื่อมีการเชื่อมต่อเครือข่ายเป็นครั้งแรก จากนั้นบริการจะพยายาม
รักษาความสดใหม่ของสัญญาณล่าสุดที่ได้รับ โดยจะปรับสมดุลความต้องการของอุปกรณ์ Android แต่ละเครื่องกับภาระงานจำนวนมากที่อาจเกิดจากอุปกรณ์ Android จำนวนมากทั่วโลกที่รีเฟรชเวลา
network_time_update_service
จะส่งคำแนะนำเกี่ยวกับเวลาในเครือข่าย
ไปยังบริการ time_detector
โดยใช้ API ภายใน จากนั้นคอมโพเนนต์แพลตฟอร์ม Android อื่นๆ
จะใช้คำแนะนำเวลาของเครือข่ายเหล่านี้
หลังจากได้รับคำแนะนำจากแหล่งที่มาของเวลาในเครือข่ายแล้ว time_detector
บริการจะพิจารณาว่าจะอัปเดตนาฬิกาของระบบตามกฎการจัดลําดับความสําคัญที่กําหนดค่าไว้หรือไม่
หากต้องการกำหนดค่าระบบตรวจหาเวลาอัตโนมัติให้ใช้คำแนะนำเกี่ยวกับต้นทางของเครือข่าย
เพื่อตั้งค่านาฬิกาของระบบโดยอัตโนมัติ ให้ใช้
core/res/res/values/config.xml
ไฟล์การกำหนดค่าเซิร์ฟเวอร์ของระบบ ตรวจสอบว่า
ค่า network
อยู่ใน config_autoTimeSourcesPriority
ใน
ตำแหน่งที่ต้องการ ดูรายละเอียดได้ที่ลำดับความสำคัญของแหล่งเวลา
การกำหนดค่าอุปกรณ์
ส่วนนี้จะอธิบายวิธีที่ผู้ผลิตอุปกรณ์สามารถกำหนดค่าระบบตรวจหาเวลาของเครือข่าย
การกำหนดค่า AOSP พื้นฐานอยู่ที่
frameworks/base/core/res/res/values/config.xml
คีย์การกำหนดค่า | ค่า AOSP | คำอธิบาย |
---|---|---|
config_ntpRetry |
3 |
หลังจากรีเฟรชไม่สำเร็จ นี่คือจำนวนครั้งที่ระบบพยายาม
สำรวจเวลาเครือข่ายโดยมีช่วงเวลาการสำรวจ NTP ที่สั้นลง
(config_ntpPollingIntervalShorter ) ก่อนที่จะหยุดชั่วคราวและใช้
ช่วงเวลาการสำรวจปกติ (config_ntpPollingInterval ) ค่าที่
น้อยกว่า 0 หมายความว่าระบบจะลองสำรวจอีกครั้งในช่วงเวลาการสำรวจ NTP ที่สั้นลง
จนกว่าจะรีเฟรชได้สำเร็จ |
config_ntpPollingInterval |
64800000 (18 ชั่วโมง) |
ช่วงเวลาการสำรวจเวลาเครือข่ายปกติเป็นมิลลิวินาที |
config_ntpPollingIntervalShorter |
60000 (1 นาที) |
ช่วงเวลาการสำรวจเวลาเครือข่ายของการลองใหม่เป็นมิลลิวินาที ใช้เมื่อ การรีเฟรชเวลาไม่สำเร็จ |
config_ntpServers |
รายการเดียว: ntp://time.android.com |
เซิร์ฟเวอร์ NTP ที่จะใช้เพื่อให้ได้เวลาที่ถูกต้อง รายการต้องอยู่ในรูปแบบ
ntp://<host>[:port]
นี่ไม่ใช่รูปแบบ URI ของ IANA ที่ลงทะเบียนแล้ว |
config_ntpTimeout |
5000 | ระยะเวลาที่รอการตอบกลับจากเซิร์ฟเวอร์ NTP เป็นมิลลิวินาทีก่อนหมดเวลา |
เซิร์ฟเวอร์
โดยค่าเริ่มต้น AOSP จะใช้เซิร์ฟเวอร์เวลาที่ time.android.com
ซึ่งเป็นชื่อแทนของ
NTP สาธารณะของ Google บริการนี้ไม่มี SLA โปรดดูรายละเอียดที่คำถามที่พบบ่อยเกี่ยวกับ NTP สาธารณะของ Google
รองรับเซิร์ฟเวอร์หลายตัว
สำหรับ Android 14 ขึ้นไป เฟรมเวิร์กจะรองรับ
เซิร์ฟเวอร์ NTP หลายรายการ ซึ่งรองรับสถานการณ์ที่อุปกรณ์มีการกระจายอยู่ทั่วโลกด้วยการกำหนดค่าเดียว แต่มีการจำกัดการเข้าถึงเซิร์ฟเวอร์ เช่น time.android.com
ในบางสถานที่
อัลกอริทึมจะลองใช้เซิร์ฟเวอร์แต่ละเครื่องที่ระบุในconfig_ntpServers
คีย์การกำหนดค่า เมื่อพบเซิร์ฟเวอร์ที่ตอบสนอง ระบบจะใช้เซิร์ฟเวอร์นั้นต่อไปจนกว่าจะรีเฟรชไม่สำเร็จหรืออุปกรณ์รีบูต
ความแม่นยำ
การซิงค์เวลาของเครือข่ายเริ่มต้นของ Android ใช้ SNTP ที่มีการค้นหาเวลาครั้งเดียว ประมาณวันละครั้งเพื่อให้แน่ใจว่าจะมีสัญญาณเวลาล่าสุดอยู่เสมอ
ผลกระทบจากเวลาในการตอบสนองของเครือข่ายเป็นปัจจัยที่ทำให้เวลาไม่ถูกต้องมากที่สุดในการใช้งาน SNTP ของ Android SNTP สันนิษฐานว่าเครือข่ายมีความล่าช้าแบบสมมาตร กล่าวคือ เวลาในการตอบสนองของเครือข่ายสำหรับคำขอจะเท่ากับเวลาในการตอบสนองของเครือข่ายสำหรับ การตอบกลับ และเวลาที่ถูกต้องจะอยู่ตรงกลางของเวลาไปกลับของเครือข่ายนั้น โดยปกติแล้ว เวลาในการรับส่งข้อมูลผ่านเครือข่ายจะอยู่ที่ประมาณ 200-300 มิลลิวินาที และในเครือข่ายแบบใช้สาย ความหน่วงจะใกล้เคียงกับแบบสมมาตร ซึ่งทำให้เกิดระดับความไม่ถูกต้องที่ผู้ใช้แทบมองไม่เห็น อย่างไรก็ตาม การโทรศัพท์ผ่านมือถือหรือวิทยุมีหลายขั้นตอนที่อาจทำให้เกิดความล่าช้าแบบอสมมาตรที่ค่อนข้างนาน ในการทำธุรกรรมในเครือข่าย ซึ่งส่งผลให้เกิดความไม่ถูกต้องมากขึ้น
เมื่อตั้งค่าเริ่มต้นของ AOSP สำหรับ config_ntpTimeout
เป็น 5000
มิลลิวินาที และหากเวลาในการตอบสนองของเครือข่ายทั้งหมดมุ่งเน้นเฉพาะขาเข้า
หรือขาออก ข้อผิดพลาดทางทฤษฎีสูงสุดจะอยู่ที่ประมาณ 2.5 วินาที
ความแม่นยำของนาฬิการะบบโดยรวมยังได้รับผลกระทบจากความสามารถของอุปกรณ์ Android
ในการติดตามเวลาที่ผ่านไปอย่างแม่นยำหลังจากได้รับสัญญาณเวลา นี่เป็น
ข้อกังวลเกี่ยวกับการจับเวลาทั้งหมดใน Android ไม่ใช่แค่การตรวจหาเวลาของเครือข่าย และเป็น
เหตุผลที่บริการ time_detector
ไม่สนใจคำแนะนำเกี่ยวกับเวลาเก่า
network_time_update_service
บริการจะรีเฟรชเป็นประจำโดยใช้ช่วงเวลา
config_ntpPollingInterval
เพื่อให้time_detector
บริการ
มีคำแนะนำเวลาใหม่ๆ และเพื่อให้มั่นใจว่าtime_detector
บริการจะไม่กลับไปใช้แหล่งที่มาของเวลาที่มีลำดับความสำคัญต่ำกว่าและมักมีความแม่นยำต่ำกว่า หรือ
บางครั้งอาจไม่ถูกต้อง เช่น telephony
เมื่อใช้การตรวจหาเวลาอัตโนมัติ ความแม่นยำของนาฬิกาของระบบอุปกรณ์อาจได้รับผลกระทบจากการกำหนดค่าอื่นๆ ของบริการ time_detector
เช่น ค่าคงที่และค่าสถานะที่ส่งผลต่อความแตกต่างของคำแนะนำเวลาจากเวลาของนาฬิกาของระบบปัจจุบันก่อนที่จะมีการปรับนาฬิกา (ServiceConfigAccessorImpl.java
)
ผู้ผลิตอุปกรณ์สามารถแก้ไขความแม่นยำได้โดยใช้ตัวเลือกและการกำหนดค่าคงที่ก่อนหน้า แต่คุณควรทราบข้อจำกัดของการติดตั้งใช้งาน SNTP ของแพลตฟอร์ม และผลกระทบที่อาจเกิดขึ้นต่อการใช้พลังงานจากการดำเนินการเครือข่ายที่บ่อยขึ้น ผลกระทบต่อแอปที่ทำงานบนอุปกรณ์จากการปรับนาฬิกาที่บ่อยขึ้นแต่มีขนาดเล็กลง และผลกระทบต่อภาระงานของเซิร์ฟเวอร์
การใช้งานเวลาของเครือข่ายอื่นๆ
หากไม่ได้กำหนดค่าการตรวจหาเวลาอัตโนมัติโดยใช้ต้นทาง network
หรือหากผู้ใช้ปิดใช้การตรวจหาเวลาอัตโนมัติ คอมโพเนนต์ต่อไปนี้จะยังคงใช้เวลาที่ได้รับจากบริการ network_time_update_service
- วิธี
SystemClock.currentNetworkTimeClock()
- ฟังก์ชันแพลตฟอร์มภายใน เช่น A-GPS สามารถระบุตำแหน่ง GNSS (ตำแหน่ง) ครั้งแรกได้เร็วขึ้นเมื่อมีข้อมูลเวลาของเครือข่าย
การแก้ไขข้อบกพร่องและการทดสอบ
ส่วนต่อไปนี้จะอธิบายคำสั่งเชลล์สำหรับการแก้ไขข้อบกพร่องและการทดสอบ ฟีเจอร์การตรวจหาเวลาของเครือข่าย
โต้ตอบกับบริการ network_time_update_service
หากต้องการส่งออกสถานะปัจจุบันของ network_time_update_service
ให้ใช้คำสั่งต่อไปนี้
adb shell cmd network_time_update_service dump
หากต้องการดูชุดตัวเลือกบรรทัดคำสั่งที่ช่วยในการทดสอบได้ ให้ใช้คำสั่งต่อไปนี้
adb shell cmd network_time_update_service help