อุปกรณ์ 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 จะถือว่าเครือข่ายมีความล่าช้าแบบสมมาตร กล่าวคือ เวลาในการตอบสนองของเครือข่ายสำหรับคำขอจะเหมือนกับเวลาในการตอบสนองของเครือข่ายสำหรับคำตอบ และเวลาที่เหมาะสมจะอยู่ตรงกลางของเวลาในการรับส่งข้อมูลของเครือข่ายนั้น บ่อยครั้ง ระยะเวลารับส่งข้อมูลในเครือข่ายจะอยู่ที่ประมาณ 2-3 ร้อยมิลลิวินาที และในเครือข่ายแบบใช้สาย เวลาในการตอบสนองจะเกือบสมมาตรกัน ซึ่งส่งผลให้ผู้ใช้แทบไม่สังเกตเห็นระดับความไม่ถูกต้อง อย่างไรก็ตาม โทรศัพท์มือถือหรือโทรศัพท์แบบใช้คลื่นวิทยุมีหลายระยะที่อาจมีการแทรกความล่าช้าแบบไม่สมมาตรที่ค่อนข้างนานลงในธุรกรรมเครือข่าย ซึ่งส่งผลให้เกิดความไม่ถูกต้องมากขึ้น
เมื่อตั้งค่าเริ่มต้นของ AOSP สำหรับ config_ntpTimeout
เป็น 5000
มิลลิวินาที และหากเวลาในการตอบสนองทั้งหมดของเครือข่ายมุ่งเน้นที่ขาเข้าหรือขาออกเพียงอย่างเดียว ความคลาดเคลื่อนสูงสุดตามทฤษฎีจะอยู่ที่ประมาณ 2.5 วินาที
ความแม่นยำของนาฬิการะบบโดยรวมยังขึ้นอยู่กับความสามารถของอุปกรณ์ Android ในการติดตามเวลาที่ผ่านไปอย่างแม่นยำหลังจากที่ได้รับสัญญาณเวลาด้วย ปัญหานี้เกี่ยวข้องกับการจับเวลาทั้งหมดใน Android ไม่ใช่แค่การตรวจหาเวลาของเครือข่าย และเป็นเหตุผลที่บริการ time_detector
ไม่สนใจการแนะนำเวลาเก่า บริการ network_time_update_service
จะรีเฟรชเป็นประจำโดยใช้ช่วงเวลา config_ntpPollingInterval
เพื่อให้บริการ time_detector
มีข้อมูลการแนะนำเวลาล่าสุดอยู่เสมอ และเพื่อให้มั่นใจว่าบริการ time_detector
จะไม่กลับไปใช้แหล่งที่มาของเวลาที่มีลำดับความสำคัญต่ำกว่าและมักมีความแม่นยำต่ำกว่า หรือแหล่งที่มาของเวลาที่ไม่ถูกต้องเป็นครั้งคราว เช่น telephony
เมื่อใช้การตรวจหาเวลาอัตโนมัติ ความแม่นยำของนาฬิการะบบของอุปกรณ์อาจได้รับผลกระทบจากการกําหนดค่าอื่นๆ ของบริการ time_detector
เช่น ค่าคงที่และ Flag ที่ส่งผลต่อความแตกต่างของเวลาแนะนําจากเวลาปัจจุบันของนาฬิการะบบก่อนที่จะปรับนาฬิกา (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