อุปกรณ์ 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
ใช้ API ภายในเพื่อส่งเวลาของเครือข่าย
คำแนะนำสำหรับบริการ time_detector
แพลตฟอร์ม 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 ถือว่าความล่าช้าของเครือข่ายแบบสมมาตร กล่าวคือ เวลาในการตอบสนองของเครือข่ายสำหรับคำขอจะเหมือนกับเวลาในการตอบสนองของเครือข่ายสำหรับ และเวลาที่ถูกต้องจะอยู่ตรงกลางของส่วนนั้น การเชื่อมต่อเครือข่ายแบบไป-กลับ บ่อยครั้งที่การเชื่อมต่อเครือข่ายแบบไป-กลับมักเรียงตามลำดับจาก 100 มิลลิวินาที และสำหรับเครือข่ายแบบใช้สาย เวลาในการตอบสนองใกล้เคียงกับ แบบสมมาตร ซึ่งทำให้เกิดความไม่ถูกต้องในระดับที่แทบจะไม่เป็นที่รับรู้ได้ ผู้ใช้ อย่างไรก็ตาม ในการใช้โทรศัพท์เคลื่อนที่หรือวิทยุ มีหลายขั้นตอนที่ อาจมีการหน่วงเวลาแบบไม่สมมาตรที่ค่อนข้างนานในการทำธุรกรรมของเครือข่าย นำไปสู่ความไม่ถูกต้องมากขึ้น
เมื่อตั้งค่าเริ่มต้นของ 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 ได้ (ตำแหน่ง) แก้ปัญหาแรกได้เร็วขึ้นเมื่อมีข้อมูลเวลาของเครือข่าย
การแก้ไขข้อบกพร่องและการทดสอบ
ส่วนต่อไปนี้จะอธิบายคำสั่ง Shell สำหรับการแก้ไขข้อบกพร่องและทดสอบ ของ Google Cloud
โต้ตอบกับบริการ network_time_update_service
หากต้องการถ่ายโอนสถานะปัจจุบันของ network_time_update_service
ให้ใช้
adb shell cmd network_time_update_service dump
หากต้องการดูชุดตัวเลือกบรรทัดคำสั่งที่ช่วยทดสอบได้ ให้ใช้ปุ่มต่อไปนี้
adb shell cmd network_time_update_service help