नेटवर्क का चयन

यह पृष्ठ वर्णन करता है कि एंड्रॉइड समवर्ती रूप से उपलब्ध नेटवर्क के बीच चयन कैसे करता है। यह नेटवर्क चयन तंत्र प्रभावित करता है कि एंड्रॉइड ऐप और सिस्टम नेटवर्क अनुरोधों को कैसे पूरा करता है, और यह प्रभावित करता है कि ऐप के लिए डिफ़ॉल्ट नेटवर्क कैसे चुना जाता है।

नेटवर्क चयन व्यवहार

यह अनुभाग Android 12 या उच्चतर चलाने वाले उपकरणों और Android 11 और उससे पहले के संस्करण चलाने वाले उपकरणों के लिए नेटवर्क चयन व्यवहार का वर्णन करता है।

एंड्रॉइड 12

एंड्रॉइड 12 या उच्चतर चलाने वाले उपकरणों के लिए, एंड्रॉइड उपलब्ध नेटवर्क के बीच चयन करने के लिए NetworkScore क्लास का उपयोग करता है। इस वर्ग में नीतिगत निर्णय लेने के लिए आवश्यक कई झंडे शामिल हैं। प्रत्येक ध्वज शब्दार्थ रूप से नेटवर्क की एक विशेषता का प्रतिनिधित्व करता है जो नेटवर्क चयन के लिए महत्वपूर्ण है।

एक नेटवर्क एजेंट ( NetworkAgent ) यह निर्दिष्ट करने के लिए POLICY_TRANSPORT_PRIMARY ध्वज का उपयोग करता है कि जब एक ही ट्रांसपोर्ट के कई नेटवर्क मौजूद हों तो नेटवर्क को प्राथमिकता दी जाती है। इसका एक विशिष्ट उदाहरण एक डुअल-सिम डिवाइस है जिसमें सेटिंग्स में एक स्विच होता है जिससे उपयोगकर्ता डिफ़ॉल्ट रूप से यह चुन सकता है कि कौन सा सिम कार्ड उपयोग करना है। किसी दिए गए परिवहन के भीतर, एंड्रॉइड बिना ध्वज वाले नेटवर्क की तुलना में POLICY_TRANSPORT_PRIMARY ध्वज वाले नेटवर्क को प्राथमिकता देता है।

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

NetworkScore वर्ग एक नेटवर्क एजेंट को यह घोषित करने की भी अनुमति देता है कि नेटवर्क को KEEP_CONNECTED_FOR_HANDOVER ध्वज और NetworkScore.Builder.setKeepConnectedReason पद्धति का उपयोग करके चालू रखा जाए। यह KEEP_CONNECTED_FOR_HANDOVER ध्वज संभावित नेटवर्क के लिए उपयोगी है, जो नेटवर्क एजेंट को नेटवर्क के प्रदर्शन का मूल्यांकन होने तक इसे प्राथमिक नेटवर्क बनाए बिना द्वितीयक वाई-फाई एसटीए पर नेटवर्क लाने की अनुमति देता है। यदि कोई नेटवर्क एजेंट इस ध्वज की घोषणा नहीं करता है, तो एजेंट को नेटवर्क के प्रदर्शन का मूल्यांकन करने का मौका मिलने से पहले किसी भी अनुरोध को पूरा नहीं करने के लिए संभावित नेटवर्क को तोड़ दिया जाता है।

यदि दो नेटवर्क किसी दिए गए अनुरोध को पूरा कर सकते हैं और नीति के दृष्टिकोण से बराबर हैं, तो चयन उस नेटवर्क को प्राथमिकता देता है जो वर्तमान में अनुरोध को पूरा कर रहा है। यदि कोई नेटवर्क अनुरोध को पूरा नहीं कर रहा है, तो वह दोनों में से एक को चुनता है, जिसके बाद नीति ध्वज बदलने तक इस नेटवर्क को प्राथमिकता दी जाती है।

नेटवर्क चयन सुविधा का कार्यान्वयन AOSP में कनेक्टिविटी मॉड्यूल में है। नेटवर्क चयन के लिए नीति तर्क NetworkRanker वर्ग और उसके सहायक वर्गों में पाया जाता है। इसका मतलब यह है कि डिवाइस निर्माता सीधे नेटवर्क चयन कोड को अनुकूलित नहीं कर सकते हैं, बल्कि उन्हें नेटवर्क के बारे में आवश्यक जानकारी देने के लिए NetworkScore में झंडे का उपयोग करना होगा।

एंड्रॉइड 11

एंड्रॉइड 11 या उससे पहले के संस्करण पर चलने वाले उपकरणों के लिए, एंड्रॉइड एक नेटवर्क एजेंट ( NetworkAgent ) के कार्यान्वयन से भेजे गए एक सरल पूर्णांक के आधार पर नेटवर्क चयन करता है। प्रत्येक अनुरोध के लिए, एंड्रॉइड उच्चतम संख्यात्मक स्कोर वाले नेटवर्क का चयन करता है जो अनुरोध को पूरा कर सकता है। यह संख्यात्मक स्कोर नेटवर्क एजेंट द्वारा भेजे गए पूर्णांक और कई स्थितियों के आधार पर दिए गए अतिरिक्त बोनस या दंड से बना है जैसे कि नेटवर्क मान्य है या नेटवर्क वीपीएन है या नहीं। नीतिगत निर्णय लेने के लिए व्यक्तिगत नेटवर्क एजेंट एक-दूसरे के साथ तालमेल बिठाते हैं।

यदि दो नेटवर्क किसी दिए गए अनुरोध को पूरा कर सकते हैं और उनका संख्यात्मक स्कोर समान है, तो व्यवहार अपरिभाषित है।

नेटवर्कस्कोर क्लास

नेटवर्क चयन सुविधा के लिए केंद्रीय वर्ग NetworkScore है। इस वर्ग में उपलब्ध फ़्लैग का एपीआई और दस्तावेज़ीकरण और setKeepConnectedReason विधि शामिल है।

NetworkScore क्लास को उसके बिल्डर क्लास के माध्यम से बनाया जाना चाहिए और आरंभीकरण पर NetworkAgent कंस्ट्रक्टर को पास किया जाना चाहिए। NetworkAgent#sendNetworkScore पद्धति का उपयोग करके नेटवर्क स्कोर को किसी भी समय अपडेट किया जा सकता है।

नेटवर्क एजेंट कार्यान्वयन उदाहरण

AOSP में विभिन्न नेटवर्क एजेंटों के उदाहरण कार्यान्वयन शामिल हैं। निम्नलिखित उदाहरण कार्यान्वयन हैं:

  • TelephonyNetworkAgent : मोबाइल नेटवर्क के लिए नीति संप्रेषित करने के लिए नेटवर्क स्कोर का उपयोग करता है
  • ClientModeImpl.WifiNetworkAgent : वाई-फाई नेटवर्क के लिए नीति संचार करने के लिए नेटवर्क स्कोर का उपयोग करता है। इस कार्यान्वयन में POLICY_EXITING ध्वज का उपयोग करके नेटवर्क स्कोर के लिए विरासत पूर्णांक के साथ पश्चगामी संगतता शामिल है।

Android 12 में अपग्रेड होने वाले उपकरण

अपने डिवाइस को एंड्रॉइड 12 में अपग्रेड करने वाले डिवाइस निर्माताओं को NetworkScore क्लास का उपयोग करने के लिए अपने नेटवर्क एजेंट कार्यान्वयन को संशोधित करना होगा। एंड्रॉइड 11 या उससे पहले के संस्करण में उपयोग किए गए लीगेसी पूर्णांक को NetworkScore में पारित किया गया है, लेकिन इसका उपयोग केवल एंड्रॉइड 12 में लॉगिंग और गैर-रिग्रेशन उद्देश्यों के लिए किया जाता है। एंड्रॉइड 12 में, डिवाइस निर्माताओं को NetworkScore झंडे का उपयोग करके वांछित परिवर्तन व्यक्त करना होगा। कनेक्टिविटी मेनलाइन मॉड्यूल तब नेटवर्क चयन निर्णय लेने के लिए झंडे का उपयोग करता है। डिवाइस निर्माता जो एंड्रॉइड 11 या उससे पहले के संस्करण के लिए कोड का उपयोग कर रहे हैं, लेकिन एंड्रॉइड 12 में कार्यान्वयन के खिलाफ निर्माण कर रहे हैं, वे बिल्ड त्रुटियों की उम्मीद कर सकते हैं क्योंकि एंड्रॉइड 12 में लीगेसी पूर्णांक को अपडेट करने के तरीकों को हटा दिया गया था।

नेटवर्क एजेंटों के लिए जो आंतरिक NetworkFactory वर्ग का उपयोग करते हैं, उन्हें अपने स्कोर फ़िल्टर को NetworkScore ऑब्जेक्ट में व्यक्त करना होगा जो फ़ैक्टरी द्वारा बनाए जा सकने वाले नेटवर्क के सबसे मजबूत स्कोर का प्रतिनिधित्व करता है। ऐसा इसलिए है क्योंकि Android 12 में NetworkFactory क्लास केवल उन अनुरोधों को पास करती है जो Android 11 और उससे पहले के सभी अनुरोधों के बजाय NetworkFactory को घोषित स्कोर फ़िल्टर से मेल खाते हैं।

हम आसान कार्यान्वयन और बैटरी बचत के लिए एक फ़िल्टर पारित करने की अनुशंसा करते हैं ताकि सभी अनुरोध NetworkFactory को पारित न हों। हालाँकि, यदि आपके कस्टम कार्यान्वयन के लिए आवश्यक है कि सभी अनुरोध NetworkFactory को पास किए जाएं, तो आप नियमित NetworkFactory.register विधि के बजाय NetworkFactory.registerIgnoringScore पंजीकृत कर सकते हैं। यदि इस विधि का उपयोग कर रहे हैं, तो हम एक स्कोर फ़िल्टर पास करने की सलाह देते हैं जो फैक्ट्री द्वारा बनाए जा सकने वाले सर्वोत्तम स्कोर को सबसे सटीक रूप से दर्शाता है ताकि बैटरी बचाने के लिए उन अनुरोधों का मूल्यांकन न किया जा सके जिन्हें फैक्ट्री पूरा नहीं कर सकती है।

मान्यकरण

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

गलत कार्यान्वयन के परिणामस्वरूप NetworkCallback के उपयोग के जवाब में ऐप्स को अप्रत्याशित नेटवर्क वापस मिल सकते हैं, जिसमें डिवाइस के डिफ़ॉल्ट नेटवर्क का चयन करना शामिल है (जब वे ConnectivityManager.registerDefaultNetworkCallback के साथ नेटवर्क कॉलबैक का उपयोग करते हैं तो सिस्टम ऐप को नेटवर्क भेजता है)।

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