नेटवर्क टाइम डिटेक्शन

एंड्रॉइड डिवाइस स्वचालित रूप से नेटवर्क स्रोत से सही यूनिक्स युग समय प्राप्त करने का प्रयास करते हैं। एंड्रॉइड समय की जानकारी प्राप्त करने के लिए एसएनटीपी प्रोटोकॉल का उपयोग करता है, जो यूडीपी प्रोटोकॉल का उपयोग करता है।

इस पृष्ठ पर वर्णित घटक स्वचालित समय पहचान प्रणाली का हिस्सा हैं जिसे नेटवर्क समय उत्पत्ति कहा जाता है। जब डिवाइस पर स्वचालित समय का पता लगाने का समर्थन किया जाता है और time_detector सेवा को इसका उपयोग करने के लिए कॉन्फ़िगर किया जाता है, तो एंड्रॉइड डिवाइस की सिस्टम घड़ी सेट करने के लिए नेटवर्क टाइम सर्वर से एक समय सिग्नल का उपयोग किया जा सकता है।

डिफ़ॉल्ट रूप से, एंड्रॉइड नेटवर्क समय उत्पत्ति को प्राथमिक स्वचालित समय पहचान उत्पत्ति के रूप में उपयोग करता है।

नेटवर्क समय पहचान प्रणाली

एंड्रॉइड सिस्टम सर्वर में चलने वाली network_time_update_service सेवा नेटवर्क टाइम डिटेक्शन सिस्टम को लागू करती है। सेवा समय-समय पर सर्वर से समय संकेत प्राप्त करने के लिए एसएनटीपी का उपयोग करती है। सेवा नेटवर्क कनेक्टिविटी पर भी नज़र रखती है और खराब कनेक्टिविटी की विस्तारित अवधि के बाद कोई हालिया समय सिग्नल उपलब्ध नहीं होने पर टाइम रिफ्रेश ट्रिगर करती है।

network_time_update_service सेवा बूट के बाद और जब नेटवर्क कनेक्टिविटी पहली बार स्थापित होती है तो समय संकेत प्राप्त करने का प्रयास करती है। फिर सेवा अपने पास मौजूद नवीनतम सिग्नल को ताज़ा रखने का प्रयास करती है। यह पर्याप्त लोड के साथ व्यक्तिगत एंड्रॉइड डिवाइसों की जरूरतों को संतुलित करता है जो दुनिया भर में कई एंड्रॉइड डिवाइसों द्वारा अपने समय को ताज़ा करके उत्पन्न किया जा सकता है।

आंतरिक एपीआई का उपयोग करते हुए, network_time_update_service नेटवर्क समय सुझावों को time_detector सेवा में सबमिट करता है। अन्य एंड्रॉइड प्लेटफ़ॉर्म घटक इन नेटवर्क समय सुझावों का उपयोग करते हैं।

नेटवर्क समय उत्पत्ति से सुझाव प्राप्त करने के बाद, time_detector सेवा यह निर्धारित करती है कि कॉन्फ़िगर प्राथमिकता नियमों के अनुसार सिस्टम घड़ी को अपडेट करना है या नहीं।

सिस्टम घड़ी को स्वचालित रूप से सेट करने के लिए नेटवर्क मूल सुझावों का उपयोग करने के लिए स्वचालित समय पहचान प्रणाली को कॉन्फ़िगर करने के लिए, core/res/res/values/config.xml सिस्टम सर्वर कॉन्फ़िगरेशन फ़ाइल का उपयोग करें। सुनिश्चित करें कि मान network वांछित स्थिति में config_autoTimeSourcesPriority में समाहित है। विवरण के लिए, समय स्रोत प्राथमिकता देखें।

उपकरण का प्रारूप

यह अनुभाग बताता है कि डिवाइस निर्माता नेटवर्क टाइम डिटेक्शन सिस्टम को कैसे कॉन्फ़िगर कर सकते हैं।

आधार AOSP कॉन्फ़िगरेशन frameworks/base/core/res/res/values/config.xml पर है:

कॉन्फ़िगरेशन कुंजी एओएसपी मान विवरण
config_ntpRetry 3 ताज़ा करने में विफल होने के बाद, यह वह संख्या है जब सिस्टम सामान्य मतदान अंतराल ( config_ntpPollingIntervalShorter ) को बंद करने और उपयोग करने से पहले, कम एनटीपी मतदान अंतराल ( config_ntpPollingInterval ) के साथ नेटवर्क समय मतदान का प्रयास करता है। 0 से कम मान का मतलब है कि सिस्टम छोटे एनटीपी मतदान अंतराल पर मतदान का पुनः प्रयास करता है जब तक कि यह सफलतापूर्वक ताज़ा नहीं हो जाता।
config_ntpPollingInterval 64800000 (18 घंटे) सामान्य नेटवर्क समय मतदान अंतराल मिलीसेकेंड में।
config_ntpPollingIntervalShorter 60000 (1 मिनट) पुनः प्रयास नेटवर्क समय मतदान अंतराल मिलीसेकेंड में। टाइम रिफ्रेश विफल होने पर उपयोग किया जाता है।
config_ntpServers एक एकल प्रविष्टि: ntp://time.android.com सटीक समय प्राप्त करने के लिए उपयोग किए जाने वाले एनटीपी सर्वर। आइटम इस रूप में होने चाहिए: ntp://<host>[:port] .
यह एक पंजीकृत आईएएनए यूआरआई योजना नहीं है।
config_ntpTimeout 5000 टाइमआउट से पहले मिलीसेकंड में एनटीपी सर्वर प्रतिक्रिया की प्रतीक्षा करने का समय।

सर्वर

डिफ़ॉल्ट रूप से, AOSP time.android.com पर टाइम सर्वर का उपयोग करता है, जो Google Public NTP का उपनाम है। इस सेवा का कोई SLA नहीं है. विवरण के लिए, Google Public NTP FAQ देखें।

एकाधिक सर्वर समर्थन

एंड्रॉइड 14 और उच्चतर के लिए, फ्रेमवर्क कई एनटीपी सर्वरों का समर्थन करता है। यह उन स्थितियों का समर्थन करता है जहां उपकरणों को एकल कॉन्फ़िगरेशन के साथ विश्व स्तर पर वितरित किया जाता है, लेकिन जहां कुछ स्थानों पर time.android.com जैसे सर्वर तक पहुंच प्रतिबंधित है।

एल्गोरिदम config_ntpServers कॉन्फ़िगरेशन कुंजी में निर्दिष्ट प्रत्येक सर्वर को आज़माता है। जब उसे कोई प्रतिक्रिया देने वाला मिल जाता है, तो सिस्टम उस सर्वर का उपयोग तब तक जारी रखता है जब तक कि वह रीफ्रेश करने में विफल न हो जाए या डिवाइस रीबूट न ​​हो जाए।

शुद्धता

एंड्रॉइड का डिफॉल्ट नेटवर्क टाइम सिंक दिन में लगभग एक बार सिंगल टाइम क्वेरी के साथ एसएनटीपी का उपयोग करता है ताकि यह सुनिश्चित किया जा सके कि इसमें हमेशा हाल का समय सिग्नल हो।

एंड्रॉइड के एसएनटीपी कार्यान्वयन के साथ समय की अशुद्धि में नेटवर्क विलंबता प्रभाव सबसे बड़ा योगदानकर्ता है। एसएनटीपी सममित नेटवर्क विलंब मानता है, यानी, अनुरोध के लिए नेटवर्क विलंबता प्रतिक्रिया के लिए नेटवर्क विलंबता के समान है, और सही समय उस नेटवर्क राउंड ट्रिप के ठीक बीच में है। अक्सर, नेटवर्क राउंड ट्रिप का समय कुछ सौ मिलीसेकंड के क्रम में होता है और वायर्ड नेटवर्क पर विलंबता सममित के करीब होती है, जिससे अशुद्धि का स्तर बढ़ जाता है जो उपयोगकर्ताओं के लिए लगभग अगोचर होता है। हालाँकि, मोबाइल या रेडियो टेलीफोनी के साथ कई चरण होते हैं जहां नेटवर्क लेनदेन में अपेक्षाकृत लंबे, असममित विलंब को शामिल किया जा सकता है जिससे अधिक अशुद्धि हो सकती है।

config_ntpTimeout के लिए AOSP डिफ़ॉल्ट सेटिंग को 5000 मिलीसेकंड पर सेट करने के साथ, और यदि सभी नेटवर्क विलंबता पूरी तरह से इनबाउंड या आउटबाउंड लेग पर केंद्रित है, तो अधिकतम सैद्धांतिक त्रुटि लगभग 2.5 सेकंड है।

समग्र सिस्टम क्लॉक सटीकता, समय संकेत प्राप्त होने के बाद बीते हुए समय को सटीक रूप से ट्रैक करने की एंड्रॉइड डिवाइस की क्षमता से भी प्रभावित होती है। यह एंड्रॉइड पर सभी टाइमकीपिंग के साथ एक चिंता का विषय है, न कि केवल नेटवर्क समय का पता लगाने के लिए, और यही कारण है कि time_detector सेवा पुराने समय के सुझावों की उपेक्षा करती है। network_time_update_service सेवा नियमित रूप से config_ntpPollingInterval अंतराल का उपयोग करके ताज़ा होती है ताकि time_detector सेवा को ताज़ा समय सुझावों के साथ आपूर्ति की जा सके और यह सुनिश्चित किया जा सके कि time_detector सेवा कम-प्राथमिकता और अक्सर कम-सटीकता या कभी-कभी गलत समय उत्पत्ति जैसे telephony पर वापस न आ जाए।

जब स्वचालित समय का पता लगाने का उपयोग किया जाता है, तो डिवाइस सिस्टम घड़ी की सटीकता time_detector सेवा के अन्य कॉन्फ़िगरेशन से प्रभावित हो सकती है, जैसे कि स्थिरांक और झंडे जो प्रभावित करते हैं कि घड़ी को समायोजित करने से पहले वर्तमान सिस्टम घड़ी के समय से समय का सुझाव कितना अलग होना चाहिए ( ServiceConfigAccessorImpl.java ).

डिवाइस निर्माता पूर्ववर्ती कॉन्फ़िगरेशन विकल्पों और स्थिरांक का उपयोग करके सटीकता को संशोधित कर सकते हैं। लेकिन प्लेटफ़ॉर्म के एसएनटीपी कार्यान्वयन की सीमाओं और अधिक लगातार नेटवर्क संचालन से बिजली की खपत पर संभावित प्रभाव, अधिक लगातार लेकिन छोटे घड़ी समायोजन से डिवाइस पर चलने वाले ऐप्स पर प्रभाव और सर्वर लोड पर प्रभाव के बारे में जागरूक होना महत्वपूर्ण है।

नेटवर्क समय के अन्य उपयोग

यदि network मूल का उपयोग करके स्वचालित समय का पता लगाना कॉन्फ़िगर नहीं किया गया है या यदि उपयोगकर्ता ने स्वचालित समय का पता लगाने को अक्षम कर दिया है, तो network_time_update_service सेवा द्वारा प्राप्त समय अभी भी निम्नलिखित घटकों द्वारा उपयोग किया जाता है:

  • SystemClock.currentNetworkTimeClock() विधि।
  • आंतरिक मंच कार्य. उदाहरण के लिए, ए-जीपीएस एक जीएनएसएस (स्थान) का पता पहले तेजी से लगा सकता है जब उसके पास नेटवर्क समय की जानकारी हो।

डिबगिंग और परीक्षण

निम्नलिखित अनुभाग डिबगिंग और नेटवर्क समय पहचान सुविधा का परीक्षण करने के लिए शेल कमांड का वर्णन करता है।

नेटवर्क_टाइम_अपडेट_सर्विस सेवा के साथ इंटरैक्ट करें

network_time_update_service की वर्तमान स्थिति को डंप करने के लिए, इसका उपयोग करें:

adb shell cmd network_time_update_service dump

कमांड लाइन विकल्पों का एक सेट देखने के लिए जो परीक्षण में सहायता कर सकता है, इसका उपयोग करें:

adb shell cmd network_time_update_service help