อุปกรณ์ 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