Android डिवाइस, नेटवर्क सोर्स से अपने-आप सही यूनिक्स इकोपॉच टाइम पाने की कोशिश करते हैं. समय की जानकारी पाने के लिए, Android एसएनटीपी प्रोटोकॉल का इस्तेमाल करता है. यह प्रोटोकॉल, यूडीपी प्रोटोकॉल का इस्तेमाल करता है.
इस पेज पर बताए गए कॉम्पोनेंट, समय का पता अपने-आप लगाने वाले सिस्टम का हिस्सा हैं. इसे नेटवर्क टाइम ऑरिजिन कहा जाता है. नेटवर्क टाइम सर्वर से मिले टाइम सिग्नल का इस्तेमाल, Android डिवाइस की सिस्टम घड़ी को सेट करने के लिए किया जा सकता है. ऐसा तब किया जा सकता है, जब डिवाइस पर समय का अपने-आप पता चलने की सुविधा काम करती हो और time_detector
सेवा को इसका इस्तेमाल करने के लिए कॉन्फ़िगर किया गया हो.
डिफ़ॉल्ट रूप से, Android नेटवर्क टाइम ऑरिजिन का इस्तेमाल, समय का अपने-आप पता लगाने वाले मुख्य ऑरिजिन के तौर पर करता है.
नेटवर्क टाइम डिटेक्शन सिस्टम
Android सिस्टम सर्वर में चलने वाली network_time_update_service
सेवा, नेटवर्क के समय का पता लगाने वाले सिस्टम को लागू करती है. यह सेवा, समय-समय पर किसी सर्वर से समय का सिग्नल पाने के लिए, एसएनटीपी का इस्तेमाल करती है. यह सेवा, इंटरनेट कनेक्शन की निगरानी भी करती है. साथ ही, जब लंबे समय तक इंटरनेट कनेक्शन खराब रहता है और समय का कोई नया सिग्नल उपलब्ध नहीं होता, तो समय को रीफ़्रेश करने की सुविधा चालू करती है.
network_time_update_service
सेवा, बूट होने के बाद और नेटवर्क कनेक्टिविटी के पहली बार चालू होने पर, समय का सिग्नल पाने की कोशिश करती है. इसके बाद, सेवा अपने पास मौजूद सबसे नए सिग्नल को अपडेट रखने की कोशिश करती है. यह समय अपडेट करने के लिए, दुनिया भर के कई Android डिवाइसों से जनरेट होने वाले भारी लोड के साथ-साथ, अलग-अलग Android डिवाइसों की ज़रूरतों को भी संतुलित करता है.
इंटरनल एपीआई का इस्तेमाल करके, network_time_update_service
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 (एक मिनट) |
नेटवर्क टाइम को फिर से पॉलिंग करने के लिए मिलीसेकंड में इंटरवल. इसका इस्तेमाल तब किया जाता है, जब समय रीफ़्रेश नहीं हो पाता. |
config_ntpServers |
एक एंट्री: ntp://time.android.com |
सटीक समय पाने के लिए इस्तेमाल किए जाने वाले NTP सर्वर. आइटम इस फ़ॉर्मैट में होने चाहिए:
ntp://<host>[:port] .
यह रजिस्टर की गई IANA यूआरआई स्कीम नहीं है. |
config_ntpTimeout |
5000 | टाइम आउट से पहले, NTP सर्वर के जवाब का इंतज़ार करने के लिए, मिलीसेकंड में तय किया गया समय. |
सर्वर
डिफ़ॉल्ट रूप से, AOSP time.android.com
पर टाइम सर्वर का इस्तेमाल करता है. यह Google के सार्वजनिक एनटीपी का दूसरा नाम है. इस सेवा के लिए कोई एसएलए नहीं है. ज़्यादा जानकारी के लिए, Google के सार्वजनिक एनटीपी के बारे में अक्सर पूछे जाने वाले सवाल देखें.
एक से ज़्यादा सर्वर के साथ काम करने की सुविधा
Android 14 और इसके बाद के वर्शन के लिए, फ़्रेमवर्क कई NTP सर्वर के साथ काम करता है. यह उन स्थितियों में काम करता है जहां डिवाइसों को दुनिया भर में एक ही कॉन्फ़िगरेशन के साथ डिस्ट्रिब्यूट किया जाता है, लेकिन time.android.com
जैसे सर्वर का ऐक्सेस कुछ जगहों पर प्रतिबंधित होता है.
एल्गोरिदम, config_ntpServers
कॉन्फ़िगरेशन कुंजी में बताए गए हर सर्वर को आज़माता है. जब उसे कोई ऐसा सर्वर मिल जाता है जो जवाब देता है, तो सिस्टम उस सर्वर का इस्तेमाल तब तक करता है, जब तक वह रीफ़्रेश नहीं हो जाता या डिवाइस रीबूट नहीं हो जाता.
सटीक होना
Android का डिफ़ॉल्ट नेटवर्क टाइम सिंक, SNTP का इस्तेमाल करता है. यह दिन में करीब एक बार, टाइम क्वेरी के साथ सिंक होता है. इससे यह पक्का करने की कोशिश की जाती है कि डिवाइस पर हमेशा अप-टू-डेट टाइम सिग्नल हो.
Android के SNTP लागू करने के साथ, समय में गड़बड़ी होने की सबसे बड़ी वजह नेटवर्क के इंतज़ार का समय है. SNTP, नेटवर्क में होने वाली देरी को एक जैसा मानता है. इसका मतलब है कि अनुरोध के लिए नेटवर्क में होने वाली देरी, जवाब के लिए नेटवर्क में होने वाली देरी के बराबर होती है. साथ ही, सही समय, नेटवर्क के राउंड ट्रिप के बीच में होता है. अक्सर, नेटवर्क का राउंड ट्रिप समय कुछ सौ मिलीसेकंड के क्रम में होता है. साथ ही, वायर्ड नेटवर्क पर इंतज़ार का समय करीब-करीब एक जैसा होता है. इस वजह से, गड़बड़ी का स्तर इतना कम होता है कि उपयोगकर्ताओं को इसका पता नहीं चलता. हालांकि, मोबाइल या रेडियो टेलीफ़ोनी में कई ऐसे चरण होते हैं जहां नेटवर्क लेन-देन में, अपेक्षाकृत लंबी और असमान देरी हो सकती है. इससे ज़्यादा गड़बड़ी हो सकती है.
अगर config_ntpTimeout
के लिए AOSP की डिफ़ॉल्ट सेटिंग को 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