किसी ऐप्लिकेशन से जनरेट होने वाले नेटवर्क ट्रैफ़िक का, डिवाइस की बैटरी लाइफ़ पर काफ़ी असर पड़ सकता है. उस ट्रैफ़िक को ऑप्टिमाइज़ करने के लिए, आपको उसे मेज़र करना होगा और उसके सोर्स की पहचान करनी होगी. नेटवर्क अनुरोध, सीधे तौर पर उपयोगकर्ता की कार्रवाई, आपके ऐप्लिकेशन कोड या आपके ऐप्लिकेशन से कम्यूनिकेट करने वाले सर्वर से आ सकते हैं.
इस विषय में, नेटवर्क ट्रैफ़िक को मॉनिटर करने और उसे कैटगरी में बांटने का तरीका बताया गया है. साथ ही, समस्याओं का पता लगाने और उन्हें हल करने के बारे में दिशा-निर्देश दिए गए हैं.
अनुरोधों की निगरानी करने के लिए, नेटवर्क प्रोफ़ाइलर का इस्तेमाल करना
अपने ऐप्लिकेशन के नेटवर्क अनुरोधों को ट्रैक करने के लिए, नेटवर्क प्रोफ़ाइलर का इस्तेमाल करें. आपके पास यह मॉनिटर करने का विकल्प होता है कि आपका ऐप्लिकेशन डेटा को कब और कैसे ट्रांसफ़र करता है. साथ ही, इसके आधार पर कोड को सही तरीके से ऑप्टिमाइज़ किया जा सकता है.
पहली इमेज. यह कुकी, नेटवर्क ट्रैफ़िक को ट्रैक करती है. नेटवर्क ट्रैफ़िक पैटर्न से पता चलता है कि अनुरोधों को पहले से फ़ेच करके या अपलोड को बंडल करके, परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.
डेटा ट्रांसफ़र की फ़्रीक्वेंसी और हर कनेक्शन के दौरान ट्रांसफ़र किए गए डेटा की मात्रा को मॉनिटर करके, अपने ऐप्लिकेशन के उन हिस्सों की पहचान की जा सकती है जिनमें बैटरी की खपत को कम किया जा सकता है. आम तौर पर, आपको ऐसे छोटे स्पाइक ढूंढने होंगे जिनमें देरी हो सकती है.
ट्रांसफ़र में अचानक हुई बढ़ोतरी की वजह का बेहतर तरीके से पता लगाने के लिए, Traffic Stats API की मदद से, किसी थ्रेड में मौजूद सॉकेट से होने वाले डेटा ट्रांसफ़र को टैग किया जा सकता है. इसके लिए, TrafficStats.setThreadStatsTag()
का इस्तेमाल करें.
इस फ़ंक्शन को कॉल करने से, किसी थ्रेड के लिए सभी ट्रैफ़िक को अपने-आप टैग नहीं किया जाता. टैग को सॉकेट पर लागू करना होता है.
थ्रेड टैग सेट हो जाने के बाद, TrafficStats.tagSocket()
और TrafficStats.untagSocket()
का इस्तेमाल करके, अलग-अलग सॉकेट को मैन्युअल तरीके से टैग और अनटैग किया जा सकता है.
अगर थ्रेड पर कोई सॉकेट खोला जाता है या कोई सर्वर सॉकेट कनेक्शन स्वीकार करता है, तो भी टैग लागू किया जाता है.
एक ही सॉकेट को कई थ्रेड से एक साथ ऐक्सेस करने पर, उस सॉकेट के लिए वही टैग इस्तेमाल किया जाएगा जो नेटवर्क पैकेट भेजे या पाए जाने के समय मौजूद था. ऐसा हो सकता है कि यह टैग, उपयोगकर्ता के डेटा लिखने या पढ़ने के समय मौजूद टैग से अलग हो. इसकी वजह बफ़रिंग और फिर से ट्रांसमिट करना है.
उदाहरण के लिए, अलग-अलग तरह के नेटवर्क ट्रैफ़िक को दिखाने के लिए, कॉन्स्टेंट तय किए जा सकते हैं. इसके लिए, यहां दिया गया कोड सैंपल देखें:
Kotlin
const val USER_INITIATED = 0x1000 const val APP_INITIATED = 0x2000 const val SERVER_INITIATED = 0x3000
Java
public static final int USER_INITIATED = 0x1000; public static final int APP_INITIATED = 0x2000; public static final int SERVER_INITIATED = 0x3000;
इसके बाद, अपने नेटवर्क अनुरोधों को इस तरह टैग किया जा सकता है:
Kotlin
TrafficStats.setThreadStatsTag(USER_INITIATED) TrafficStats.tagSocket(outputSocket) // Transfer data using socket TrafficStats.untagSocket(outputSocket)
Java
TrafficStats.setThreadStatsTag(USER_INITIATED); TrafficStats.tagSocket(outputSocket); // Transfer data using socket TrafficStats.untagSocket(outputSocket);
HttpURLConnection
लाइब्रेरी, मौजूदा TrafficStats.getThreadStatsTag()
वैल्यू के आधार पर सॉकेट को अपने-आप टैग करती है. लाइब्रेरी, सॉकेट को टैग और अनटैग भी करती है. ऐसा तब होता है, जब उन्हें कीप-अलाइव पूल के ज़रिए रीसाइकल किया जाता है. इस बारे में, यहां दिए गए कोड सैंपल में बताया गया है:
Kotlin
class IdentifyTransferSpikeTask { @WorkerThread fun request(url: String) { TrafficStats.setThreadStatsTag(APP_INITIATED) // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag() } }
Java
public class IdentifyTransferSpikeTask { @WorkerThread public void request(String url) { TrafficStats.setThreadStatsTag(APP_INITIATED); // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag(); } }
नेटवर्क ट्रैफ़िक टाइप का विश्लेषण करना
जब आपको अपने ऐप्लिकेशन से जनरेट हुए नेटवर्क ट्रैफ़िक की जानकारी मिलती है, तब आपको ट्रैफ़िक के सोर्स के बारे में पता होना चाहिए. इससे आपको ट्रैफ़िक को सही तरीके से ऑप्टिमाइज़ करने में मदद मिलती है. अगर आपका ऐप्लिकेशन उपयोगकर्ता की कार्रवाइयों का जवाब दे रहा है, तो नेटवर्क गतिविधि का बार-बार जनरेट होना पूरी तरह से सही हो सकता है. हालांकि, अगर आपका ऐप्लिकेशन फ़ोरग्राउंड में नहीं है या डिवाइस जेब या पर्स में है, तो यह पूरी तरह से गलत है.
उपयोगकर्ता की ओर से शुरू किए गए ट्रैफ़िक का विश्लेषण करना
उपयोगकर्ता की शुरू की गई नेटवर्क ट्रैफ़िक को एक साथ ग्रुप किया जा सकता है. ऐसा तब होता है, जब उपयोगकर्ता आपके ऐप्लिकेशन में कोई खास टास्क कर रहा हो. इसके अलावा, इसे अलग-अलग हिस्सों में भी बांटा जा सकता है. ऐसा तब होता है, जब उपयोगकर्ता ऐसी अतिरिक्त जानकारी का अनुरोध करता है जिसे आपके ऐप्लिकेशन को पाना होता है. उपयोगकर्ता की ओर से शुरू किए गए नेटवर्क ट्रैफ़िक का विश्लेषण करने का आपका मकसद, समय के साथ नेटवर्क के बार-बार इस्तेमाल के पैटर्न का पता लगाना है. साथ ही, अनुरोधों को एक साथ ग्रुप करके, उनकी फ़्रीक्वेंसी को कम करने की कोशिश करना है.
उपयोगकर्ताओं के अनुरोधों का अनुमान न लगा पाने की वजह से, आपके ऐप्लिकेशन में इस तरह के नेटवर्क इस्तेमाल को ऑप्टिमाइज़ करना मुश्किल हो जाता है. इसके अलावा, जब उपयोगकर्ता किसी ऐप्लिकेशन का इस्तेमाल कर रहे होते हैं, तो उन्हें तुरंत जवाब मिलने की उम्मीद होती है. इसलिए, अनुरोधों को कुछ समय के लिए रोकने से, उपयोगकर्ता अनुभव खराब हो सकता है. आम तौर पर, जब कोई उपयोगकर्ता सीधे तौर पर आपके ऐप्लिकेशन से इंटरैक्ट कर रहा हो, तब आपको नेटवर्क का बेहतर तरीके से इस्तेमाल करने के बजाय, उपयोगकर्ता को तुरंत जवाब देने को प्राथमिकता देनी चाहिए.
उपयोगकर्ता की ओर से शुरू किए गए ट्रैफ़िक को ऑप्टिमाइज़ करने से जुड़े सुझावों के लिए, उपयोगकर्ता की ओर से शुरू किए गए अनुरोधों को ऑप्टिमाइज़ करें लेख पढ़ें.
ऐप्लिकेशन से शुरू होने वाले ट्रैफ़िक का विश्लेषण करना
ऐप्लिकेशन से शुरू होने वाला नेटवर्क ट्रैफ़िक, आम तौर पर एक ऐसा क्षेत्र होता है जहां नेटवर्क बैंडविड्थ के बेहतर इस्तेमाल पर काफ़ी असर पड़ सकता है. अपने ऐप्लिकेशन की नेटवर्क गतिविधि का विश्लेषण करते समय, ऐसे समय का पता लगाएं जब ऐप्लिकेशन का इस्तेमाल नहीं किया गया. साथ ही, यह तय करें कि क्या इस समय को बढ़ाया जा सकता है. अगर आपको अपने ऐप्लिकेशन से लगातार नेटवर्क ऐक्सेस करने के पैटर्न दिखते हैं, तो इस ट्रैफ़िक को बैच करने की कोशिश करें. इससे डिवाइस रेडियो को गतिविधि के दौरान, कम पावर वाले मोड पर वापस जाने की अनुमति मिल जाएगी.
ऐप्लिकेशन से शुरू होने वाले ट्रैफ़िक को ऑप्टिमाइज़ करने के सुझावों के लिए, ऐप्लिकेशन से शुरू होने वाले अनुरोधों को ऑप्टिमाइज़ करें लेख पढ़ें.
सर्वर से शुरू होने वाले ट्रैफ़िक का विश्लेषण करना
आपके ऐप्लिकेशन से कम्यूनिकेट करने वाले सर्वर की वजह से शुरू होने वाली नेटवर्क गतिविधि भी एक ऐसा क्षेत्र है जहां नेटवर्क बैंडविड्थ के बेहतर इस्तेमाल पर काफ़ी असर पड़ सकता है. Firebase Cloud Messaging (FCM) एक हल्का-फुल्का मेकेनिज़्म है. इसका इस्तेमाल, सर्वर से किसी ऐप्लिकेशन इंस्टेंस तक डेटा ट्रांसफ़र करने के लिए किया जाता है. FCM का इस्तेमाल करके, आपका सर्वर किसी डिवाइस पर चल रहे ऐप्लिकेशन को यह सूचना दे सकता है कि उसके लिए नया डेटा उपलब्ध है.
सर्वर से शुरू होने वाले ट्रैफ़िक को ऑप्टिमाइज़ करने के सुझावों के लिए, सर्वर से शुरू होने वाले अनुरोधों को ऑप्टिमाइज़ करें लेख पढ़ें.
नेटवर्क ट्रैफ़िक के असर को विज़ुअलाइज़ करने के लिए, Battery Historian का इस्तेमाल करना
Battery Historian एक ऐसा टूल है जो किसी डिवाइस की बैटरी के इस्तेमाल को समय के साथ दिखाता है. इस टूल का इस्तेमाल करके, यह पता लगाया जा सकता है कि नेटवर्क गतिविधि से बैटरी की खपत पर क्या असर पड़ता है. उदाहरण के लिए, Battery Historian आपको यह दिखा सकता है कि आपका ऐप्लिकेशन, आपकी उम्मीद से ज़्यादा बार सेल्युलर रेडियो का इस्तेमाल कर रहा है या नहीं. Battery Historian का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Batterystats और Battery Historian की मदद से बैटरी के इस्तेमाल की प्रोफ़ाइल बनाना लेख पढ़ें.