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

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

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

इस सेक्शन में, डिवाइसों के लिए नेटवर्क चुनने के तरीके के बारे में बताया गया है Android 12 या इसके बाद वाले वर्शन के लिए और Android वर्शन वाले डिवाइसों के लिए 11 और उससे कम.

Android 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 फ़्लैग, संभावित नेटवर्क के लिए फ़ायदेमंद होता है. इससे नेटवर्क एजेंट, किसी सेकंडरी वाई-फ़ाई एसटीए पर नेटवर्क को तब तक प्राइमरी नेटवर्क के तौर पर सेट नहीं करता, जब तक नेटवर्क की परफ़ॉर्मेंस का आकलन नहीं हो जाता. अगर कोई नेटवर्क एजेंट इस फ़्लैग का एलान नहीं करता है, तो एजेंट को नेटवर्क की परफ़ॉर्मेंस का आकलन करने का मौका मिलने से पहले ही, संभावित नेटवर्क को किसी भी अनुरोध को पूरा न करने की वजह से हटा दिया जाता है.

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

नेटवर्क चुनने की सुविधा, AOSP में कनेक्टिविटी मॉड्यूल में लागू की गई है. नेटवर्क को चुनने की नीति का मकसद यहां दिया गया है: NetworkRanker क्लास और इसके हेल्पर क्लास हैं. इसका मतलब है कि डिवाइस बनाने वाली कंपनियां ये काम नहीं कर सकतीं नेटवर्क चुनने के कोड को सीधे कस्टमाइज़ करता है, लेकिन इसके बजाय इसे NetworkScore का इस्तेमाल, नेटवर्क के बारे में ज़रूरी जानकारी देने के लिए किया जाता है.

Android 11

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

अगर दो नेटवर्क किसी अनुरोध को दिखा सकते हैं और उनका नंबर स्कोर एक ही है, तो व्यवहार तय नहीं होता.

NetworkScore क्लास

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

NetworkScore क्लास को बिल्डर क्लास से बनाया जाना चाहिए और पास होना चाहिए तक NetworkAgent कंस्ट्रक्टर शुरू करने के बाद. इसका इस्तेमाल करके नेटवर्क स्कोर किसी भी समय अपडेट किए जा सकते हैं NetworkAgent#sendNetworkScore तरीका.

नेटवर्क एजेंट को लागू करने के उदाहरण

AOSP में, अलग-अलग नेटवर्क एजेंट को लागू करने के उदाहरण शामिल हैं. यहां दिए गए उदाहरणों में,

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

Android 12 पर अपग्रेड किए जा रहे डिवाइस

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

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

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

पुष्टि करें

किसी Android डिवाइस पर नेटवर्क चुनने के व्यवहार की पुष्टि करने के लिए, नीचे दिए गए टेस्ट के मुताबिक:

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

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