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

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

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

यह खंड Android 12 या उसके बाद वाले वर्शन पर चलने वाले डिवाइस और Android 11 और उससे पहले के वर्शन चला रहे डिवाइस के लिए नेटवर्क चयन व्यवहार का वर्णन करता है।

एंड्रॉइड 12

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

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

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

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

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

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

एंड्रॉइड 11

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

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

नेटवर्कस्कोर वर्ग

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

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

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

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

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

Android 12 में अपग्रेड करने वाले डिवाइस

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

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

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

मान्यकरण

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

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

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