डेटा ट्रांसफ़र करने के लिए वायरलेस रेडियो का इस्तेमाल करना, आपके ऐप्लिकेशन की बैटरी खर्च होने की सबसे बड़ी वजहों में से एक हो सकता है. नेटवर्क पर की जाने वाली गतिविधि की वजह से बैटरी खर्च होने की समस्या को कम करने के लिए, यह समझना ज़रूरी है कि आपका कनेक्टिविटी मॉडल, रेडियो हार्डवेयर पर कैसे असर डालेगा.
इस सेक्शन में, वायरलेस रेडियो स्टेट मशीन के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि आपके ऐप्लिकेशन का कनेक्टिविटी मॉडल इसके साथ कैसे इंटरैक्ट करता है. इसके बाद, यह कई ऐसी तकनीकें उपलब्ध कराता है जिनका इस्तेमाल करके, ऐप्लिकेशन के डेटा खर्च का बैटरी पर पड़ने वाले असर को कम किया जा सकता है.
रेडियो स्टेट मशीन
आपके उपयोगकर्ता के डिवाइस के वायरलेस रेडियो में, बैटरी बचाने की सुविधाएं पहले से मौजूद होती हैं. इनसे बैटरी की खपत कम करने में मदद मिलती है. पूरी तरह से चालू होने पर, वायरलेस रेडियो काफ़ी बैटरी खर्च करता है. हालांकि, बंद होने या स्टैंडबाय मोड में होने पर, रेडियो बहुत कम बैटरी खर्च करता है.
एक अहम बात यह है कि रेडियो, स्टैंडबाय मोड से तुरंत पूरी तरह से चालू मोड में नहीं जा सकता. रेडियो को "चालू" करने में कुछ समय लगता है. इसलिए, बैटरी ज़्यादा ऊर्जा वाली स्थिति से कम ऊर्जा वाली स्थिति में धीरे-धीरे ट्रांज़िशन करती है, ताकि इस्तेमाल न होने पर ऊर्जा बचाई जा सके. साथ ही, रेडियो को "चालू" करने से जुड़ी इंतज़ार की अवधि को कम किया जा सके.
आम तौर पर, 3G नेटवर्क रेडियो के लिए स्टेट मशीन में तीन एनर्जी स्टेट होते हैं:
- फ़ुल पावर: इसका इस्तेमाल तब किया जाता है, जब कनेक्शन चालू हो. इससे डिवाइस को ज़्यादा से ज़्यादा स्पीड से डेटा ट्रांसफ़र करने की अनुमति मिलती है.
- कम पावर: यह एक इंटरमीडिएट स्टेट है, जो बैटरी की खपत को करीब 50% तक कम कर देती है.
- स्टैंडबाय: इस मोड में, डिवाइस कम से कम बिजली खर्च करता है. इस दौरान, कोई भी इंटरनेट कनेक्शन चालू नहीं होता.
लो और स्टैंडबाय मोड में बैटरी का इस्तेमाल काफ़ी कम होता है. हालांकि, इनकी वजह से नेटवर्क के अनुरोधों में काफ़ी इंतज़ार करना पड़ता है. लो पावर मोड से फ़ुल पावर मोड में वापस आने में करीब 1.5 सेकंड लगते हैं. वहीं, स्टैंडबाय मोड से फ़ुल पावर मोड में आने में दो सेकंड से ज़्यादा लग सकते हैं.
लेटेंसी को कम करने के लिए, स्टेट मशीन ट्रांज़िशन को पोस्टपोन करने के लिए डिले का इस्तेमाल करती है, ताकि कम ऊर्जा वाली स्थितियों में ट्रांज़िशन किया जा सके. इमेज 1 में, सामान्य 3G रेडियो के लिए AT&T के समय का इस्तेमाल किया गया है.
पहली इमेज. सामान्य 3G वायरलेस रेडियो स्टेट मशीन.
हर डिवाइस पर रेडियो स्टेट मशीन, खास तौर पर उससे जुड़े ट्रांज़िशन में होने वाली देरी ("टेल टाइम") और स्टार्टअप लेटेंसी, इस्तेमाल की गई वायरलेस रेडियो टेक्नोलॉजी (3G, एलटीई, 5G वगैरह) के आधार पर अलग-अलग होगी. साथ ही, इसे मोबाइल और इंटरनेट सेवा देने वाली कंपनी के नेटवर्क से तय और कॉन्फ़िगर किया जाता है.
इस पेज पर, AT&T से मिले डेटा के आधार पर, सामान्य 3G वायरलेस रेडियो के लिए एक स्टेट मशीन के बारे में बताया गया है. हालांकि, सामान्य सिद्धांत और उनसे मिलने वाले सबसे सही तरीके, सभी वायरलेस रेडियो सेटअप पर लागू होते हैं.
यह तरीका, मोबाइल वेब ब्राउज़िंग के लिए काफ़ी असरदार है. इससे, वेब ब्राउज़ करते समय उपयोगकर्ताओं को अनचाही देरी से बचाया जा सकता है. कम टेल-टाइम से यह भी पक्का होता है कि ब्राउज़िंग सेशन खत्म होने के बाद, रेडियो कम बैटरी खर्च करने वाले मोड में जा सकता है.
हालांकि, इस तरीके से Android जैसे आधुनिक स्मार्टफ़ोन ऑपरेटिंग सिस्टम पर ऐप्लिकेशन सही तरीके से काम नहीं कर पाते. इन सिस्टम पर ऐप्लिकेशन, फ़ोरग्राउंड (जहां इंतज़ार का समय कम होना ज़रूरी है) और बैकग्राउंड (जहां बैटरी लाइफ़ को प्राथमिकता दी जानी चाहिए), दोनों में चलते हैं.
ऐप्लिकेशन, रेडियो स्टेट मशीन पर कैसे असर डालते हैं
जब भी कोई नया इंटरनेट कनेक्शन बनाया जाता है, तो रेडियो पूरी पावर वाली स्थिति में चला जाता है. पहले बताई गई 3G रेडियो स्टेट मशीन के मामले में, यह आपके ट्रांसफ़र के दौरान पूरी पावर पर रहेगी. साथ ही, इसमें पांच सेकंड का अतिरिक्त टेल टाइम भी शामिल होगा. इसके बाद, यह 12 सेकंड तक कम ऊर्जा वाली स्थिति में रहेगी. इसलिए, किसी सामान्य 3G डिवाइस के लिए, हर डेटा ट्रांसफ़र सेशन में रेडियो को कम से कम 18 सेकंड तक ऊर्जा की ज़रूरत होगी.
इसका मतलब है कि अगर कोई ऐप्लिकेशन एक सेकंड में तीन बार डेटा ट्रांसफ़र करता है, तो वायरलेस रेडियो हमेशा चालू रहेगा. साथ ही, स्टैंडबाय मोड में जाते ही यह फिर से ज़्यादा पावर मोड में चला जाएगा.
दूसरी इमेज. एक सेकंड के ट्रांसफ़र के लिए, हर मिनट में तीन बार वायरलेस रेडियो पावर का इस्तेमाल किया जाता है. इस आंकड़े में, रन के बीच "पावर अप" लेटेंसी शामिल नहीं है.
इसकी तुलना में, अगर वही ऐप्लिकेशन अपने डेटा ट्रांसफ़र को बंडल करता है और हर मिनट में तीन सेकंड का एक ट्रांसफ़र करता है, तो इससे रेडियो हर मिनट में कुल 20 सेकंड के लिए ही हाई-पावर मोड में रहेगा. इससे रेडियो हर मिनट में 40 सेकंड के लिए स्टैंडबाय मोड पर रहेगा. इससे बैटरी की खपत में काफ़ी कमी आएगी.
तीसरी इमेज. हर मिनट में एक बार होने वाले तीन सेकंड के ट्रांसफ़र के लिए, वायरलेस रेडियो पावर का इस्तेमाल.
ऑप्टिमाइज़ेशन की तकनीकें
अब जब आपको यह समझ आ गया है कि नेटवर्क ऐक्सेस से बैटरी लाइफ़ पर कैसे असर पड़ता है, तो आइए कुछ ऐसी चीज़ों के बारे में बात करते हैं जो बैटरी खर्च को कम करने में मदद कर सकती हैं. साथ ही, इनसे उपयोगकर्ताओं को तेज़ और बेहतर अनुभव भी मिलता है.
बंडल डेटा ट्रांसफ़र
पिछले सेक्शन में बताया गया है कि डेटा ट्रांसफ़र को बंडल करना, बैटरी की परफ़ॉर्मेंस को बेहतर बनाने के सबसे अच्छे तरीकों में से एक है. इससे, ज़्यादा डेटा को कम बार ट्रांसफ़र किया जा सकता है.
हालांकि, अगर आपके ऐप्लिकेशन को उपयोगकर्ता की किसी कार्रवाई के जवाब में तुरंत डेटा पाने या भेजने की ज़रूरत है, तो ऐसा करना हमेशा संभव नहीं होता. डेटा को पहले से फ़ेच करके और अनुमान लगाकर, इस समस्या को कम किया जा सकता है. अन्य मामलों में, जैसे कि किसी सर्वर पर लॉग या आंकड़े भेजना और ऐप्लिकेशन से शुरू किए गए अन्य डेटा ट्रांसफ़र जो ज़रूरी नहीं हैं, उन्हें बैच और बंडल में आसानी से भेजा जा सकता है. बैकग्राउंड में नेटवर्क ट्रांसफ़र शेड्यूल करने के बारे में सलाह पाने के लिए, ऐप्लिकेशन से शुरू किए गए टास्क ऑप्टिमाइज़ करना देखें.
डेटा प्रीफ़ेच करना
डेटा को पहले से फ़ेच करना, आपके ऐप्लिकेशन के ज़रिए चलाए जाने वाले अलग-अलग डेटा ट्रांसफ़र सेशन की संख्या को कम करने का एक और असरदार तरीका है. प्रीफ़ेच करने की सुविधा की मदद से, जब उपयोगकर्ता आपके ऐप्लिकेशन में कोई कार्रवाई करता है, तो ऐप्लिकेशन यह अनुमान लगाता है कि उपयोगकर्ता की अगली कार्रवाइयों के लिए, किस डेटा की सबसे ज़्यादा ज़रूरत होगी. इसके बाद, वह उस डेटा को एक ही बार में, एक ही कनेक्शन पर, पूरी क्षमता के साथ फ़ेच करता है.
डेटा ट्रांसफ़र करने की प्रोसेस को पहले ही पूरा करके, डेटा डाउनलोड करने के लिए रेडियो को चालू करने की संख्या को कम किया जा सकता है. इससे न सिर्फ़ बैटरी लाइफ़ बचती है, बल्कि इंतज़ार का समय भी कम होता है. साथ ही, ज़रूरी बैंडविड्थ कम होती है और डाउनलोड करने में कम समय लगता है.
प्रीफ़ेच करने से, उपयोगकर्ता अनुभव भी बेहतर होता है. इससे, ऐप्लिकेशन में होने वाली देरी को कम किया जा सकता है. यह देरी, कोई कार्रवाई करने या डेटा देखने से पहले, डाउनलोड पूरा होने का इंतज़ार करने की वजह से होती है.
यहां एक उदाहरण दिया गया है.
समाचार पढ़ने वाला व्यक्ति
समाचार देने वाले कई ऐप्लिकेशन, बैंडविड्थ कम करने की कोशिश करते हैं. इसके लिए, वे हेडलाइन को सिर्फ़ तब डाउनलोड करते हैं, जब कोई कैटगरी चुनी जाती है. साथ ही, पूरे लेख को सिर्फ़ तब डाउनलोड करते हैं, जब उपयोगकर्ता उसे पढ़ना चाहता है. इसके अलावा, थंबनेल को सिर्फ़ तब डाउनलोड करते हैं, जब वे स्क्रोल करके व्यू में आते हैं.
इस तरीके का इस्तेमाल करने पर, रेडियो को उपयोगकर्ताओं के समाचार पढ़ने के ज़्यादातर सेशन के दौरान चालू रखना पड़ता है. ऐसा इसलिए, क्योंकि वे हेडलाइन स्क्रोल करते हैं, कैटगरी बदलते हैं, और लेख पढ़ते हैं. इतना ही नहीं, एनर्जी स्टेट के बीच लगातार स्विच करने से, कैटगरी स्विच करने या लेख पढ़ने के दौरान काफ़ी इंतज़ार करना पड़ता है.
सबसे सही तरीका यह है कि ऐप्लिकेशन शुरू होने पर, ज़रूरत के मुताबिक डेटा पहले से फ़ेच कर लिया जाए. इसकी शुरुआत, समाचार की हेडलाइन और थंबनेल के पहले सेट से की जाए. इससे ऐप्लिकेशन शुरू होने में कम समय लगता है. इसके बाद, बाकी हेडलाइन और थंबनेल के साथ-साथ, हर लेख का टेक्स्ट भी फ़ेच किया जाए. यह टेक्स्ट, कम से कम मुख्य हेडलाइन की सूची में उपलब्ध होना चाहिए.
दूसरा विकल्प यह है कि हर हेडलाइन, थंबनेल, लेख के टेक्स्ट, और शायद लेख की पूरी तस्वीरों को पहले से फ़ेच कर लिया जाए. आम तौर पर, यह काम बैकग्राउंड में पहले से तय शेड्यूल के हिसाब से किया जाता है. इस तरीके से, ऐसे कॉन्टेंट को डाउनलोड करने में काफ़ी बैंडविड्थ और बैटरी खर्च होने का जोखिम रहता है जिसका कभी इस्तेमाल नहीं किया जाता. इसलिए, इसे सावधानी से लागू किया जाना चाहिए.
ज़्यादा जानकारी
डेटा को पहले से फ़ेच करने के कई फ़ायदे हैं. हालांकि, अगर इसे बहुत ज़्यादा इस्तेमाल किया जाए, तो बैटरी और बैंडविड्थ की खपत बढ़ सकती है. साथ ही, डाउनलोड कोटा भी बढ़ सकता है, क्योंकि ऐसा डेटा डाउनलोड हो जाता है जिसका इस्तेमाल नहीं किया जाता. यह भी ज़रूरी है कि प्रीफ़ेच की वजह से, ऐप्लिकेशन के शुरू होने में देरी न हो. ऐसा तब होता है, जब ऐप्लिकेशन प्रीफ़ेच पूरा होने का इंतज़ार करता है. इसका मतलब है कि डेटा को धीरे-धीरे प्रोसेस किया जा सकता है या लगातार ट्रांसफ़र शुरू किए जा सकते हैं. इससे, ऐप्लिकेशन को शुरू करने के लिए ज़रूरी डेटा को पहले डाउनलोड और प्रोसेस किया जा सकता है.
डेटा को कितनी तेज़ी से प्रीफ़ेच किया जाता है, यह डाउनलोड किए जा रहे डेटा के साइज़ और उसके इस्तेमाल किए जाने की संभावना पर निर्भर करता है. मोटे तौर पर, पहले बताई गई स्टेट मशीन के आधार पर, ऐसे डेटा के लिए जिसके मौजूदा उपयोगकर्ता सेशन में इस्तेमाल होने की 50% संभावना है, आम तौर पर करीब छह सेकंड (करीब एक से दो मेगाबाइट) के लिए प्रीफ़ेच किया जा सकता है. ऐसा, इस्तेमाल न किए गए डेटा को डाउनलोड करने की संभावित लागत और उस डेटा को डाउनलोड न करने से होने वाली संभावित बचत के बराबर होने से पहले किया जा सकता है.
आम तौर पर, डेटा को प्रीफ़ेच करना एक अच्छा तरीका है. इससे आपको हर दो से पांच मिनट में, सिर्फ़ एक से पांच मेगाबाइट के क्रम में दूसरा डाउनलोड शुरू करना होगा.
इस सिद्धांत के मुताबिक, बड़ी फ़ाइलों (जैसे कि वीडियो फ़ाइलें) को नियमित अंतराल (हर दो से पांच मिनट) पर टुकड़ों में डाउनलोड किया जाना चाहिए. इससे, सिर्फ़ उस वीडियो डेटा को प्रीफ़ेच किया जा सकेगा जिसे अगले कुछ मिनटों में देखा जा सकता है.
इसका एक समाधान यह है कि पूरा डेटा डाउनलोड करने के लिए, सिर्फ़ वाई-फ़ाई से कनेक्ट होने पर शेड्यूल किया जाए. इसके अलावा, ऐसा तब किया जाए, जब डिवाइस चार्ज हो रहा हो. WorkManager API का इस्तेमाल करके, बैकग्राउंड में होने वाले काम को तब तक रोका जा सकता है, जब तक डिवाइस डेवलपर की तय की गई शर्तों को पूरा नहीं करता. जैसे, डिवाइस का चार्ज होना और वाई-फ़ाई से कनेक्ट होना.
अनुरोध करने से पहले, कनेक्टिविटी की जांच करें
मोबाइल डिवाइस पर सेल सिग्नल खोजना, बैटरी खर्च करने वाली सबसे बड़ी गतिविधियों में से एक है. उपयोगकर्ता के अनुरोधों को मैनेज करने का सबसे सही तरीका यह है कि पहले ConnectivityManager का इस्तेमाल करके कनेक्शन की जांच करें. इसके बारे में कनेक्टिविटी की स्थिति और कनेक्शन मीटरिंग को मॉनिटर करें में बताया गया है.
अगर नेटवर्क नहीं है, तो ऐप्लिकेशन मोबाइल रेडियो को खोजने के लिए मजबूर न करके बैटरी बचा सकता है. इसके बाद, अनुरोध को शेड्यूल किया जा सकता है. साथ ही, कनेक्शन बनने पर अन्य अनुरोधों के साथ बैच में पूरा किया जा सकता है.
पूल कनेक्शन
बैचिंग और प्रीफ़ेचिंग के अलावा, एक और रणनीति है जो आपकी मदद कर सकती है. वह है, अपने ऐप्लिकेशन के इंटरनेट कनेक्शन को पूल करना.
आम तौर पर, नए इंटरनेट कनेक्शन शुरू करने के बजाय, मौजूदा इंटरनेट कनेक्शन का फिर से इस्तेमाल करना ज़्यादा असरदार होता है. कनेक्शन का फिर से इस्तेमाल करने से, नेटवर्क को ट्रैफ़िक और नेटवर्क डेटा से जुड़ी समस्याओं पर ज़्यादा समझदारी से प्रतिक्रिया देने में मदद मिलती है.
HttpURLConnection और OkHttp जैसे ज़्यादातर एचटीटीपी क्लाइंट, डिफ़ॉल्ट रूप से कनेक्शन-पूलिंग की सुविधा चालू करते हैं. साथ ही, एक ही कनेक्शन का इस्तेमाल कई अनुरोधों के लिए करते हैं.
रीकैप और आगे की योजना
इस सेक्शन में, आपने वायरलेस रेडियो और कुछ ऐसी रणनीतियों के बारे में बहुत कुछ सीखा जिन्हें बड़े पैमाने पर लागू किया जा सकता है. इससे, बैटरी खर्च को कम करते हुए, उपयोगकर्ताओं को तेज़ और रिस्पॉन्सिव अनुभव दिया जा सकता है.
अगले सेक्शन में, हम ज़्यादातर ऐप्लिकेशन में होने वाले तीन अलग-अलग तरह के नेटवर्क इंटरैक्शन के बारे में विस्तार से जानेंगे. आपको इन सभी तरह के इंटरैक्शन के लिए, ड्राइवर के बारे में जानकारी मिलेगी. साथ ही, इन इंटरैक्शन को बेहतर तरीके से मैनेज करने के लिए, आधुनिक तकनीकों और एपीआई के बारे में भी पता चलेगा.