इस पेज पर बताया गया है कि 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 डिवाइस पर नेटवर्क चुनने के व्यवहार की पुष्टि करने के लिए, नीचे दिए गए टेस्ट के मुताबिक:
NetworkScoreTest
सीटीएस टेस्टNetworkRanker
यूनिट टेस्ट
गलत तरीके से लागू करने पर, ऐप्लिकेशन के NetworkCallback
का इस्तेमाल करने पर, उन्हें अनचाहे नेटवर्क मिल सकते हैं. इनमें डिवाइस का डिफ़ॉल्ट नेटवर्क भी शामिल है. यह वह नेटवर्क होता है जिसे सिस्टम, ऐप्लिकेशन के ConnectivityManager.registerDefaultNetworkCallback
के साथ नेटवर्क कॉलबैक का इस्तेमाल करने पर भेजता है.
गलत तरीके से लागू करने की वजह से, बैटरी की खपत बहुत ज़्यादा हो सकती है. ऐसा इसलिए होता है, क्योंकि नेटवर्क एजेंट को ऐसे स्कोर के साथ लाया जाता है जिसकी वजह से वह किसी भी अनुरोध के लिए ज़रूरी शर्तें पूरी नहीं कर पाता और तुरंत बंद हो जाता है. अगर एजेंट को बार-बार चालू और बंद किया जाता है, तो इससे बैटरी का ज़्यादा इस्तेमाल हो सकता है.