इस पेज पर बताया गया है कि Android, एक साथ उपलब्ध नेटवर्क में से किसी एक को कैसे चुनता है. नेटवर्क चुनने के इस तरीके से, Android पर ऐप्लिकेशन और सिस्टम के नेटवर्क अनुरोधों को पूरा करने के तरीके पर असर पड़ता है. साथ ही, इससे इस बात पर भी असर पड़ता है कि Android, किसी ऐप्लिकेशन के लिए डिफ़ॉल्ट नेटवर्क कैसे चुनता है.
नेटवर्क चुनने के तरीके से जुड़ी सेटिंग
इस सेक्शन में, Android 12 या उसके बाद के वर्शन वाले डिवाइसों और Android 11 (एपीआई लेवल 30) और उससे पहले के वर्शन वाले डिवाइसों के लिए, नेटवर्क चुनने के तरीके के बारे में बताया गया है.
Android 12
Android 12 या इसके बाद के वर्शन वाले डिवाइसों के लिए, Android, उपलब्ध नेटवर्क में से किसी एक को चुनने के लिए NetworkScore
क्लास का इस्तेमाल करता है. इस क्लास में ऐसे फ़्लैग होते हैं जो नीति से जुड़े फ़ैसले लेते हैं. हर फ़्लैग, नेटवर्क एट्रिब्यूट को दिखाता है. यह नेटवर्क चुनने के लिए ज़रूरी होता है.
नेटवर्क एजेंट (NetworkAgent
) POLICY_TRANSPORT_PRIMARY
फ़्लैग का इस्तेमाल करके यह बताता है कि अगर एक ही ट्रांसपोर्ट के कई नेटवर्क मौजूद हैं, तो Android उस नेटवर्क को प्राथमिकता देता है. उदाहरण के लिए, ड्यूअल सिम वाले डिवाइस में सेटिंग में एक स्विच होता है. इसकी मदद से, यह चुना जा सकता है कि डिफ़ॉल्ट रूप से किस सिम कार्ड का इस्तेमाल किया जाए. किसी दिए गए ट्रांसपोर्ट में, Android उस नेटवर्क को प्राथमिकता देता है जिसमें POLICY_TRANSPORT_PRIMARY
फ़्लैग मौजूद होता है.
नेटवर्क एजेंट, POLICY_EXITING
फ़्लैग का इस्तेमाल करके ऐसे नेटवर्क की पहचान करता है जो डिसकनेक्ट होने वाला है. उदाहरण के लिए, अगर कोई उपयोगकर्ता नेटवर्क की रेंज से बाहर चला जाता है, तो वाई-फ़ाई नेटवर्क की क्वालिटी खराब हो जाती है. अगर इस फ़्लैग के बिना कोई दूसरा नेटवर्क उपलब्ध है, तो Android इस फ़्लैग वाले नेटवर्क का इस्तेमाल नहीं करता. हर नेटवर्क एजेंट यह तय कर सकता है कि नेटवर्क की परफ़ॉर्मेंस कब इतनी खराब हो गई है कि उसे बंद किया जा सकता है.
NetworkScore
क्लास की मदद से, नेटवर्क एजेंट यह भी एलान कर सकता है कि Android, KEEP_CONNECTED_FOR_HANDOVER
फ़्लैग और NetworkScore.Builder.setKeepConnectedReason
तरीके का इस्तेमाल करके, नेटवर्क को कनेक्ट रखता है. इस KEEP_CONNECTED_FOR_HANDOVER
फ़्लैग से, संभावित नेटवर्क को मदद मिलती है. इस फ़्लैग की मदद से, नेटवर्क एजेंट किसी नेटवर्क को सेकंडरी वाई-फ़ाई STA पर ला सकता है. हालांकि, Android नेटवर्क की परफ़ॉर्मेंस का आकलन करने तक, इसे प्राइमरी नेटवर्क नहीं बनाया जा सकता. अगर कोई नेटवर्क एजेंट इस फ़्लैग की जानकारी नहीं देता है, तो Android संभावित नेटवर्क को बंद कर देता है. ऐसा इसलिए होता है, क्योंकि एजेंट के नेटवर्क की परफ़ॉर्मेंस का आकलन करने से पहले, कोई भी अनुरोध पूरा नहीं किया जाता.
अगर दो नेटवर्क किसी अनुरोध को पूरा कर सकते हैं और दोनों की नीतियां एक जैसी हैं, तो Android उस नेटवर्क को प्राथमिकता देता है जो अनुरोध को पूरा कर रहा है. अगर कोई नेटवर्क अनुरोध पूरा नहीं कर रहा है, तो Android इनमें से किसी एक को चुनता है. नीति के उल्लंघन से जुड़े फ़्लैग में बदलाव होने तक, इस नेटवर्क को प्राथमिकता दी जाती रहेगी.
नेटवर्क चुनने की सुविधा, Android ओपन सोर्स प्रोजेक्ट (AOSP) में कनेक्टिविटी मॉड्यूल में लागू की जाती है. नेटवर्क चुनने के लिए नीति का लॉजिक, NetworkRanker
क्लास और उसकी हेल्पर क्लास में होता है. इसका मतलब है कि डिवाइस बनाने वाली कंपनियां, नेटवर्क चुनने के कोड को सीधे तौर पर अपनी पसंद के मुताबिक नहीं बना सकतीं. इसके बजाय, उन्हें नेटवर्क के बारे में जानकारी देने के लिए NetworkScore
में मौजूद फ़्लैग का इस्तेमाल करना होगा.
Android 11
Android 11 या इससे पहले के वर्शन वाले डिवाइसों के लिए, Android, नेटवर्क एजेंट (NetworkAgent
) से भेजे गए पूर्णांक के आधार पर नेटवर्क चुनता है. हर अनुरोध के लिए, Android उस नेटवर्क को चुनता है जिसका सबसे ज़्यादा न्यूमेरिक स्कोर होता है और जो अनुरोध को पूरा कर सकता है. यह संख्यात्मक स्कोर, नेटवर्क एजेंट की ओर से भेजे गए पूर्णांक से बनता है. इसमें अतिरिक्त बोनस या जुर्माने भी शामिल होते हैं. Android, इन बोनस या जुर्माने को शर्तों के आधार पर लागू करता है. उदाहरण के लिए, नेटवर्क की पुष्टि हुई है या वह वीपीएन है. नेटवर्क एजेंट, नीति से जुड़े फ़ैसले लेने के लिए एक-दूसरे के साथ सिंक करते हैं.
अगर दो नेटवर्क किसी अनुरोध को पूरा कर सकते हैं और उनका स्कोर एक जैसा है, तो यह तय नहीं किया जा सकता कि कौनसे नेटवर्क को प्राथमिकता दी जाएगी.
NetworkScore क्लास
नेटवर्क चुनने की सुविधा के लिए, NetworkScore
क्लास सबसे अहम है. इस क्लास में, उपलब्ध फ़्लैग और NetworkScore.Builder.setKeepConnectedReason
तरीके के लिए एपीआई और दस्तावेज़ शामिल हैं.
आपको बिल्डर क्लास का इस्तेमाल करके, NetworkScore
क्लास बनानी होगी. साथ ही, इसे शुरू करने के दौरान NetworkAgent
कंस्ट्रक्टर को पास करना होगा. NetworkAgent#sendNetworkScore
तरीके का इस्तेमाल करके, नेटवर्क स्कोर को किसी भी समय अपडेट किया जा सकता है.
नेटवर्क एजेंट को लागू करने के उदाहरण
AOSP में, अलग-अलग नेटवर्क एजेंट को लागू करने के उदाहरण शामिल होते हैं. यहां दी गई सूची में, लागू करने के उदाहरण दिए गए हैं:
TelephonyNetworkAgent
: मोबाइल नेटवर्क के लिए नीति के बारे में बताने के लिए, नेटवर्क स्कोर का इस्तेमाल करता है.ClientModeImpl.WifiNetworkAgent
: यह कुकी, वाई-फ़ाई नेटवर्क के लिए नीति के बारे में जानकारी देने के लिए नेटवर्क स्कोर का इस्तेमाल करती है. इस तरीके को लागू करने से,POLICY_EXITING
फ़्लैग का इस्तेमाल करके, नेटवर्क स्कोर के लिए लेगसी पूर्णांक के साथ बैकवर्ड कंपैटिबिलिटी मिलती है.
Android 12 पर अपग्रेड किए जा रहे डिवाइस
डिवाइस बनाने वाली कंपनियों को अपने डिवाइसों को Android 12 पर अपग्रेड करना होगा. इसके लिए, उन्हें अपने नेटवर्क एजेंट के लागू किए गए सिस्टम में बदलाव करना होगा, ताकि वे NetworkScore
क्लास का इस्तेमाल कर सकें. Android 11 या इससे पहले के वर्शन में इस्तेमाल किया गया लेगसी पूर्णांक, NetworkScore
में पास किया जाता है. हालांकि, इसका इस्तेमाल सिर्फ़ Android 12 में लॉगिंग और नॉन-रिग्रेशन के लिए किया जाता है. Android 12 में, डिवाइस बनाने वाली कंपनियों को NetworkScore
फ़्लैग का इस्तेमाल करके बदलावों के बारे में बताना होगा. इसके बाद, Connectivity Mainline मॉड्यूल इन फ़्लैग का इस्तेमाल करके, नेटवर्क चुनने से जुड़े फ़ैसले लेता है. Android 11 या इससे पहले के वर्शन के लिए कोड का इस्तेमाल करने वाले डिवाइस बनाने वाली कंपनियां, Android 12 में लागू किए गए बदलावों के हिसाब से कोड बना सकती हैं. हालांकि, उन्हें बिल्ड से जुड़ी गड़बड़ियां मिल सकती हैं. ऐसा इसलिए, क्योंकि Android 12 में लेगसी इंटिजर को अपडेट करने के तरीके हटा दिए गए हैं.
इंटरनल NetworkFactory
क्लास का इस्तेमाल करने वाले नेटवर्क एजेंट के लिए, आपको स्कोर फ़िल्टर को NetworkScore
ऑब्जेक्ट में दिखाना होगा. यह ऑब्जेक्ट, नेटवर्क के सबसे ज़्यादा स्कोर को दिखाता है, जिसे फ़ैक्ट्री बना सकती है. ऐसा इसलिए है, क्योंकि Android 12 में NetworkFactory
क्लास सिर्फ़ उन अनुरोधों को पास करती है जो NetworkFactory
के लिए तय किए गए स्कोर फ़िल्टर से मेल खाते हैं. वहीं, Android 11 और इससे पहले के वर्शन में, यह सभी अनुरोधों को पास करती है.
लागू करने की प्रोसेस को आसान बनाने और बैटरी बचाने के लिए, फ़िल्टर पास किया जा सकता है. इससे यह पक्का होता है कि NetworkFactory
सभी अनुरोधों को प्रोसेस नहीं करता है. हालांकि, अगर कस्टम तरीके से लागू करने के लिए यह ज़रूरी है कि सभी अनुरोध NetworkFactory
को पास किए जाएं, तो सामान्य NetworkFactory.register
तरीके के बजाय NetworkFactory.registerIgnoringScore
को रजिस्टर किया जा सकता है. इस तरीके का इस्तेमाल करने पर, स्कोर
फ़िल्टर पास करें. इससे फ़ैक्ट्री में बनाए जा सकने वाले सबसे अच्छे स्कोर के बारे में सटीक जानकारी मिलती है.
इससे बैटरी की बचत होती है, क्योंकि यह उन अनुरोधों का आकलन नहीं करता जिन्हें फ़ैक्ट्री पूरा नहीं कर सकती.
Validation
Android डिवाइस पर नेटवर्क चुनने के तरीके की पुष्टि करने के लिए, यहां दिए गए टेस्ट का इस्तेमाल करें:
NetworkScoreTest
CTS टेस्टNetworkRanker
यूनिट टेस्ट
गलत तरीके से लागू करने पर, NetworkCallback
का इस्तेमाल करने वाले ऐप्लिकेशन में अनचाहे नेटवर्क वापस आ सकते हैं. इसमें डिवाइस के डिफ़ॉल्ट नेटवर्क को चुनना भी शामिल है. यह वह नेटवर्क होता है जिसे सिस्टम, नेटवर्क कॉलबैक का इस्तेमाल करने वाले ऐप्लिकेशन को भेजता है. उदाहरण के लिए, ConnectivityManager.registerDefaultNetworkCallback
के साथ.
गलत तरीके से लागू करने पर, बैटरी तेज़ी से खत्म होने की समस्या भी हो सकती है. ऐसा तब होता है, जब किसी नेटवर्क एजेंट को ऐसे स्कोर के साथ लाया जाता है जो उसे किसी अनुरोध के लिए ज़रूरी शर्तें पूरी करने की अनुमति नहीं देता है. इसके बाद, उसे तुरंत हटा दिया जाता है. अगर एजेंट बार-बार शुरू और बंद होता है, तो इससे बैटरी की खपत ज़्यादा हो सकती है.