Android Profiler Android Studio में निर्मित टूल का एक सेट है जो रीयल टाइम में ऐप के प्रदर्शन की निगरानी करता है। यह आपको तीसरे पक्ष की लाइब्रेरी स्थापित किए बिना CPU लोड, मेमोरी खपत, नेटवर्क ट्रैफ़िक और ऊर्जा खपत को ट्रैक करने की अनुमति देता है। Android Developers के अनुसार, प्रोफाइलर सीधे IDE में एकीकृत है और कनेक्टेड डिवाइस पर किसी भी प्रक्रिया के लिए मिलीसेकंड सटीकता के साथ मेट्रिक्स प्रदान करता है।
मुख्य बिंदु
Android Profiler Android Studio का एक घटक है जिसने पुराने Android Monitor और DDMS को बदल दिया है। यह ऐप के सभी पहलुओं के प्रोफाइलिंग के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है: CPU Profiler प्रोसेसर विश्लेषण के लिए, Memory Profiler मेमोरी प्रबंधन के लिए, Network Profiler नेटवर्क अनुरोधों के लिए और Energy Profiler ऊर्जा खपत के लिए। Android Studio के माध्यम से ऐप लॉन्च करने पर डेटा स्वचालित रूप से एकत्र किया जाता है।
प्रोफाइलर एमुलेटर और USB के माध्यम से कनेक्टेड भौतिक डिवाइस दोनों पर काम करता है। Google I/O 2023 के अनुसार, Android Profiler का उपयोग 70% से अधिक Android प्रोजेक्ट्स में किया जाता है और इसे प्रदर्शन निदान का मानक उपकरण माना जाता है। तीसरे पक्ष के समाधानों पर मुख्य लाभ शून्य एकीकरण है: build.gradle में निर्भरताएं जोड़ने या ऐप कोड को संशोधित करने की आवश्यकता नहीं है।
Android Profiler की आर्किटेक्चर Perfetto पर बनाई गई है — Android का सिस्टम ट्रेसर जो कर्नेल और ऐप स्तर पर डेटा एकत्र करता है। Perfetto न्यूनतम ओवरहेड (1% से कम CPU) प्रदान करता है और 30 मिनट तक की दीर्घकालिक रिकॉर्डिंग का समर्थन करता है। यह न केवल तेज़ संचालन बल्कि लंबे समय तक चलने वाले परिदृश्यों — स्क्रीन संक्रमण, पृष्ठभूमि सिंक्रनाइज़ेशन, एक घंटे के उपयोग में मेमोरी खपत को प्रोफाइल करने की अनुमति देता है।
प्रोफाइलर चार प्रकार का डेटा एकत्र करता है: CPU — प्रति कोर और थ्रेड लोड, Memory — Java Heap, Native Heap, Stack, Graphics, Network — सभी आने वाले और जाने वाले अनुरोध, Energy — ऊर्जा खपत श्रेणियां (Idle, Light, Medium, Heavy)। डेटा टाइमलाइन पर सिंक्रनाइज़ होता है ताकि आप एक साथ देख सकें कि CPU परिवर्तन मेमोरी और ऊर्जा खपत को कैसे प्रभावित करता है।
CPU Profiler टाइमलाइन पर रीयल टाइम में प्रोसेसर लोड दिखाता है, जो ऐप थ्रेड द्वारा विभाजित होता है। प्रत्येक थ्रेड को एक रंगीन रेखा या क्षेत्र द्वारा दर्शाया जाता है — क्षेत्र जितना चौड़ा होगा, थ्रेड उतना ही अधिक CPU समय लेता है। लाल क्षेत्र ऐप के काम को दर्शाते हैं, नीले सिस्टम कॉल को, और ग्रे प्रतीक्षा को दर्शाता है।
विस्तृत विश्लेषण के लिए, CPU Profiler तीन रिकॉर्डिंग मोड का समर्थन करता है: Trace Java Methods (सभी Java विधियों की ट्रेसिंग), Trace C/C++ Functions (नेटिव NDK फ़ंक्शन की ट्रेसिंग) और Sample Java Methods (सैंपलिंग, अनुशंसित मोड)। सैंपलिंग सबसे कम ओवरहेड देता है और दैनिक प्रोफाइलिंग के लिए उपयुक्त है, जबकि पूर्ण ट्रेसिंग का उपयोग जटिल समस्याओं को खोजने के लिए किया जाता है।
// उदाहरण: CPU Profiler विश्लेषण इस विधि को अवरोधक के रूप में दिखाएगा
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// CPU Profiler inBackgroundThread में उच्च CPU लोड दिखाएगा
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// प्रोफाइलिंग के बाद अनुशंसा:
// computeHeavyTransformation 80% समय लेती है — परिणाम कैश करें
class DataProcessorOptimized {
private val cache = LruCache<String, Result>(100)
suspend fun processLargeDataset(items: List<Item>): List<Result> {
return withContext(Dispatchers.Default) {
items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
}
}
}
रिकॉर्डिंग के बाद, CPU Profiler एक Top-Down Tree — प्रत्येक विधि के निष्पादन समय के साथ एक कॉल ट्री दिखाता है। Self Time/Total कॉलम पर ध्यान दें: यदि किसी विधि का Self Time 16 ms से अधिक है और इसे UI थ्रेड से कॉल किया जाता है — तो यह गारंटीकृत फ्रेम ड्रॉप है। समाधान — भारी गणनाओं को Dispatchers.IO या Default के माध्यम से पृष्ठभूमि थ्रेड में ले जाएं।
Sample Java Methods — 3-5% ओवरहेड के साथ दैनिक प्रोफाइलिंग के लिए अनुशंसित मोड। Trace Java Methods — प्रत्येक कॉल की पूर्ण ट्रेसिंग, 15% तक ओवरहेड, छोटी रिकॉर्डिंग (5-10 सेकंड) के लिए उपयोग किया जाता है। Trace C/C++ Functions — Linux Perf के माध्यम से NDK कोड की ट्रेसिंग, गेम और C++ लाइब्रेरी के विश्लेषण के लिए अपरिहार्य। समस्या के प्रकार के आधार पर मोड बदलें।
Memory Profiler ऐप की सभी मेमोरी श्रेणियों को ट्रैक करता है: Java Heap (JVM ऑब्जेक्ट), Native Heap (JNI के माध्यम से C/C++ आवंटन), Stack (थ्रेड स्टैक) और Graphics (टेक्सचर, GPU बफर)। मुख्य विज़ुअलाइज़ेशन मेमोरी खपत का एक समय ग्राफ है जहां प्रत्येक श्रेणी अपने रंग में दिखाई जाती है। यदि गार्बेज कलेक्शन के बाद ग्राफ कम नहीं होता है — तो लीक का संदेह करें।
लीक खोजने के लिए, Capture Heap Dump सुविधा का उपयोग करें। डंप के समय, Android Profiler ऐप को ~100 ms के लिए रोकता है और एक HPROF फ़ाइल बनाता है — सभी जीवित Java Heap ऑब्जेक्ट का पूर्ण स्नैपशॉट। डंप खोलने के बाद, आप ऑब्जेक्ट को Retained Size (ऑब्जेक्ट हटाए जाने पर मुक्त होने वाली मेमोरी की मात्रा) के अनुसार सॉर्ट कर सकते हैं और Activity, Fragment या Bitmap के उदाहरण खोज सकते हैं जो नष्ट हो जाने चाहिए थे।
Google I/O 2022 के अनुसार, LeakCanary के साथ Memory Profiler Android पर मेमोरी लीक डिटेक्शन के 95% परिदृश्यों को कवर करता है। LeakCanary स्वचालित रूप से काम करता है — यह पृष्ठभूमि में लीक का पता लगाता है। Memory Profiler मैन्युअल विश्लेषण के लिए आवश्यक है: आप केवल लीक नहीं, बल्कि आवंटन की पूरी तस्वीर देखते हैं।
| मेमोरी श्रेणी | विवरण | सामान्य आकार |
|---|---|---|
| Java Heap | JVM हीप: Kotlin/Java ऑब्जेक्ट | 5–200 MB |
| Native Heap | JNI, NDK के माध्यम से आवंटन | 1–100 MB |
| Graphics | टेक्सचर, GPU बफर | 10–200 MB |
| Stack | सभी थ्रेड के स्टैक | 1–10 MB |
डंप कैप्चर करने के बाद, ऑब्जेक्ट को Retained Size के अनुसार सॉर्ट करें — यह मेमोरी की वह मात्रा है जो ऑब्जेक्ट हटाए जाने पर मुक्त होगी। बड़े Retained Size वाले Activity, Fragment और Bitmap के उदाहरण खोजें जो मेमोरी में नहीं होने चाहिए। ऑब्जेक्ट को पकड़ने वाली रेफरेंस श्रृंखला देखने के लिए Reference Tree टैब पर जाएं — अक्सर यह सिंगलटन का स्टैटिक फील्ड या साफ न किया गया कॉलबैक होता है। एक महत्वपूर्ण मीट्रिक है Allocation rate (प्रति सेकंड आवंटन की संख्या)। यदि आवंटन दर 10,000 ऑब्जेक्ट/सेकंड से अधिक है, तो ऐप अस्थायी ऑब्जेक्ट बनाने और हटाने में बहुत अधिक समय खर्च कर रहा है, जो GC पर दबाव डालता है और माइक्रो-फ्रीज़ का कारण बनता है। इस मामले में, View Inspector का उपयोग करें और लूप में बार-बार ऑब्जेक्ट निर्माण वाले स्थान खोजें।
Network Profiler टाइमलाइन पर रीयल टाइम में सभी ऐप नेटवर्क अनुरोध प्रदर्शित करता है। प्रत्येक अनुरोध एक क्षैतिज पट्टी के रूप में दिखाया गया है — इसकी लंबाई निष्पादन समय से मेल खाती है, इसका रंग अनुरोध प्रकार (GET, POST, PUT, DELETE) से मेल खाता है। टाइमलाइन स्क्रॉल करने से आप देख सकते हैं कि अनुरोध समय के साथ कैसे वितरित हैं और क्या वे डुप्लिकेट हैं।
सभी लोकप्रिय लाइब्रेरी समर्थित हैं: OkHttp, Retrofit, Volley, Ktor। Ktor और OkHttp के लिए, प्रोफाइलर इंटरसेप्टर और कन्वर्टर्स सहित पूर्ण कॉल स्टैक दिखाता है। प्रत्येक अनुरोध के लिए, Request Headers और Response Headers, प्रतिक्रिया निकाय (1 MB तक), स्थिति कोड और अवधि उपलब्ध हैं।
Network Profiler द्वारा पहचानी जाने वाली सामान्य समस्याएं: कैशिंग की कमी (प्रत्येक खोलने पर एक ही URL का अनुरोध किया जाता है), डुप्लिकेट अनुरोध (दो घटक एक साथ समान डेटा लोड करते हैं), अत्यधिक प्रतिक्रिया आकार (सर्वर 5 MB लौटाता है जब 50 KB की आवश्यकता होती है)। Network Profiler आपको टाइमलाइन पर एक नज़र में ऐसी समस्याओं को देखने में मदद करता है।
धीमे नेटवर्क का अनुकरण करने के लिए, Android Studio में Network Conditioning का उपयोग करें — यह बैंडविड्थ को 3G/2G तक सीमित करने और विलंब जोड़ने की अनुमति देता है। खराब नेटवर्क स्थितियों में ऐप व्यवहार के परीक्षण के लिए यह महत्वपूर्ण है, विशेष रूप से अस्थिर इंटरनेट वाले क्षेत्रों में काम करने वाले ऐप्स के लिए।
Energy Profiler Perfetto डेटा के आधार पर बैटरी चार्ज पर ऐप के प्रभाव का मूल्यांकन करता है। उपकरण मिलीएम्प्स में वास्तविक खपत को मापता नहीं है, बल्कि प्रत्येक ऑपरेशन को ऊर्जा खपत की पांच श्रेणियों में वर्गीकृत करता है: Idle, Light, Medium, High और Overloaded। Energy Profiler टाइमलाइन रंग-कोडित है: हरा (हल्का लोड), पीला (मध्यम), लाल (उच्च)।
लाल क्षेत्रों के मुख्य कारण: WakeLock (ऐप प्रोसेसर को सक्रिय रखता है), Location GPS (उच्च सटीकता के साथ लगातार निर्देशांक अनुरोध), Keep-Alive कनेक्शन (सर्वर के साथ बार-बार डेटा आदान-प्रदान), बड़े डेटा स्थानांतरण (फ़ाइल अपलोड, स्ट्रीमिंग)। Energy Profiler सटीक रूप से दिखाता है कि किस ऑपरेशन ने किस समय ऊर्जा खपत में वृद्धि की।
Android Developers के अनुसार, एक सामान्य ऐप को High श्रेणी में 5% से अधिक समय नहीं बिताना चाहिए। यदि Energy Profiler प्रोफाइलिंग समय के 10% से अधिक लाल क्षेत्र दिखाता है — तो ऐप बैटरी ड्रेन मानदंड पर समीक्षा पास नहीं करेगा। अनुशंसा — पृष्ठभूमि कार्यों के लिए WorkManager का उपयोग करें, Location अनुरोधों को न्यूनतम आवश्यक सटीकता तक सीमित करें और नेटवर्क अनुरोधों को बैचों में एकत्र करें।
Android Profiler लॉन्च करना एक क्लिक दूर है: Android Studio में View → Tool Windows → Profiler खोलें या दाएं पैनल में Profiler आइकन पर डबल-क्लिक करें। कनेक्टेड डिवाइस पर ऐप लॉन्च करने के बाद, Android Studio स्वचालित रूप से प्रक्रिया से कनेक्ट होगा और डेटा एकत्र करना शुरू करेगा। CPU, Memory, Network और Energy के ग्राफ तुरंत टाइमलाइन पर दिखाई देंगे।
विस्तृत विश्लेषण के लिए, वांछित टैब (CPU, Memory, Network या Energy) चुनें और रिकॉर्डिंग शुरू करें। CPU के लिए, मैं 30 सेकंड की रिकॉर्डिंग अवधि के साथ Sample Java Methods मोड की अनुशंसा करता हूं — यह एक सामान्य परिदृश्य के लिए पर्याप्त है। Memory के लिए — परिदृश्य पूरा करने के बाद हीप डंप कैप्चर करें (Capture Heap Dump)। Network के लिए, रिकॉर्डिंग स्वचालित रूप से शुरू होती है, परिदृश्य समाप्त करने के बाद बस Stop बटन दबाएं।
रिकॉर्डिंग रोकने के बाद, डेटा एक्सपोर्ट करें: File → Save As पूरे सत्र को .perf फ़ाइल में सहेजता है। यह ऑप्टिमाइज़ेशन से पहले और बाद में मेट्रिक्स की तुलना करने के लिए सुविधाजनक है। पहले स्थिर संस्करण पर एक बेसलाइन सत्र बनाएं और प्रत्येक नए सत्र की उससे तुलना करें — प्रदर्शन परिवर्तनों का निष्पक्ष मूल्यांकन करने का यही एकमात्र तरीका है।
Android Profiler को Android Studio CLI और Firebase Test Lab के माध्यम से कमांड लाइन से चलाया जा सकता है। Firebase Test Lab UI परीक्षणों के भाग के रूप में प्रदर्शन प्रोफाइलिंग का समर्थन करता है: आपको परीक्षण परिणाम के साथ CPU, Memory और Network मेट्रिक्स मिलते हैं। पाइपलाइन को इस प्रकार सेट करें कि यदि मेट्रिक्स बेसलाइन से 10% गिरती हैं, तो डेवलपर द्वारा समीक्षा किए जाने तक CI पाइपलाइन अवरुद्ध हो जाए।
अक्सर पूछे जाने वाले प्रश्न
प्रभाव न्यूनतम है। Android Profiler डेटा संग्रह के लिए Perfetto का उपयोग करता है, जो 1% से कम CPU ओवरहेड जोड़ता है। Sample Java Methods मोड में, ओवरहेड लगभग 3-5% है, जो परिदृश्य प्रोफाइलिंग के लिए नगण्य है। पूर्ण मेथड ट्रेसिंग 15% तक ओवरहेड दे सकती है, इसलिए इसका उपयोग केवल छोटी रिकॉर्डिंग के लिए किया जाता है।
हां, सिस्टम ट्रेस को Perfetto CLI के माध्यम से सीधे डिवाइस से रिकॉर्ड किया जा सकता है: adb shell perfetto --out /data/local/tmp/trace.perf। फिर फ़ाइल को Perfetto UI इंटरफ़ेस (ui.perfetto.dev) में खोलें या पूर्ण ऐप मार्कअप के साथ देखने के लिए Android Studio में आयात करें।
Android Profiler एक सिस्टम उपकरण है जिसे प्रॉक्सी कॉन्फ़िगरेशन की आवश्यकता नहीं है। यह प्रदर्शन के संदर्भ में सीधे IDE में अनुरोध दिखाता है। Charles Proxy एक बाहरी प्रॉक्सी सर्वर है जो अधिक विस्तृत विश्लेषण (ट्रैफ़िक इंटरसेप्शन, अनुरोध संशोधन, पुन: भेजना) प्रदान करता है। प्रदर्शन प्रोफाइलिंग के लिए, Android Profiler का उपयोग करें; API अनुबंध विश्लेषण के लिए, Charles का उपयोग करें।
परिदृश्य निष्पादित करने से पहले हीप डंप लें (उदाहरण के लिए, Activity खोलने से पहले)। परिदृश्य निष्पादित करें — Activity खोलें और बंद करें। दूसरा डंप लें। जीवित Activity इंस्टेंस की संख्या की तुलना करें: यदि दूसरे डंप में अधिक हैं — तो यह लीक है। Retained Size के अनुसार सॉर्ट करें, अतिरिक्त Activity इंस्टेंस खोजें और कारण जानने के लिए Reference Tree देखें।
Energy Profiler को डिवाइस स्तर पर Power Profiles समर्थन और Android 8.0+ की आवश्यकता है। एमुलेटर और कुछ फर्मवेयर (विशेष रूप से चीनी) पर डेटा गायब हो सकता है। समाधान — साफ Android फर्मवेयर वाले Pixel या Samsung जैसे संदर्भ उपकरणों पर ऊर्जा खपत प्रोफाइल करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें