ऐप्लिकेशन को बेहतर, भरोसेमंद, और बैटरी की कम खपत करने वाला बनाने के लिए, यह ज़रूरी है कि परफ़ॉर्मेंस से जुड़ी सामान्य समस्याओं की पहचान की जाए और उन्हें ठीक किया जाए. ये समस्याएं, ऐप्लिकेशन के क्रैश या फ़्रीज़ होने, यूज़र इंटरफ़ेस (यूआई) रेंडरिंग, मेमोरी की खपत, बैकग्राउंड में होने वाले काम, स्टार्टअप में लगने वाले समय, और बिल्ड ऑप्टिमाइज़ेशन से जुड़ी हो सकती हैं.
इस सेक्शन में मौजूद गाइड में, हर तरह की समस्या के लिए Android प्लैटफ़ॉर्म के काम करने के तरीके के बारे में बताया गया है. साथ ही, Android Studio Profiler, Perfetto, Logcat, और ApplicationExitInfo जैसे टूल का इस्तेमाल करके, समस्याओं का पता लगाने, उनकी प्रोफ़ाइल बनाने, और उन्हें ठीक करने का तरीका बताया गया है.
ऐप्लिकेशन को क्रैश या फ़्रीज़ होने जैसी समस्याओं से बचाना
- एएनआर: ब्लॉक की गई यूज़र इंटरफ़ेस (यूआई) थ्रेड, मुख्य थ्रेड I/O, लॉक कंटेंशन या ब्रॉडकास्ट रिसीवर के धीमे होने की वजह से होने वाली, ऐप्लिकेशन काम नहीं कर रहा है (एएनआर) गड़बड़ियों का पता लगाएं और उन्हें ठीक करें.
- क्रैश: स्टैक ट्रेस पढ़ें, Logcat आउटपुट की जांच करें, और हैंडल न किए गए अपवादों और नेटिव सिग्नल को रोकें.
रेंडरिंग और स्टार्टअप
- धीमी रेंडरिंग: महंगे लेआउट, बाइंड पास या मुख्य थ्रेड के रुकने की वजह से, यूज़र इंटरफ़ेस (यूआई) के फ़्रेम (
>16msऔर>700ms) के ड्रॉप होने या फ़्रीज़ होने की समस्या का पता लगाएं और उसे ठीक करें. - धीमे सेशन (सिर्फ़ गेम के लिए):
SurfaceFlingerकी मदद से फ़्रेम पेसिंग को मेज़र करें. साथ ही, Android फ़्रेम पेसिंग (Swappy), Vulkan, और Android Dynamic Performance Framework (ADPF) का इस्तेमाल करके, गेम के फ़्रेम रेट को ऑप्टिमाइज़ करें. - ऐप्लिकेशन के शुरू होने में लगने वाला समय: कोल्ड, वॉर्म, और हॉट लॉन्च के इंटरनल को समझें. साथ ही, शुरुआती डिसप्ले में लगने वाला समय (टीटीआईडी) और पूरी तरह से डिसप्ले होने में लगने वाला समय (टीटीएफ़डी) मेज़र करें. इसके अलावा, स्टार्टअप के काम को ऑप्टिमाइज़ करें.
मेमोरी मैनेज करना
- Low memory killers (LMKs): जानें कि Android Low Memory Killer daemon (
lmkd),oom_adj_scoreके ज़रिए प्रोसेस को कैसे प्राथमिकता देता है. साथ ही, Android Studio, Unity, और Unreal Engine में मेमोरी फ़ुटप्रिंट को प्रोफ़ाइल करने का तरीका जानें. - मेमोरी का इस्तेमाल (बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी और स्वैप मेमोरी): फ़ोरग्राउंड, सेवा, और बैकग्राउंड की स्थितियों में, अपने ऐप्लिकेशन की बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी और स्वैप मेमोरी के फ़ुटप्रिंट को मेज़र करें और कम करें.
- बिट मैप के लिए मेमोरी का इस्तेमाल: बड़े साइज़ वाले या लीक हुए बिट मैप के लिए मेमोरी के आवंटन का पता लगाएं. साथ ही, यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट के बैकग्राउंड में जाने पर ग्राफ़िक बफ़र रिलीज़ करें.
बैटरी और बैकग्राउंड में होने वाले काम
- वेक लॉक का ज़्यादा इस्तेमाल: पार्शियल वेक लॉक को लंबे समय तक होल्ड करने से बचें. साथ ही, बैकग्राउंड में होने वाले टास्क को
WorkManagerयाJobSchedulerपर माइग्रेट करें. - अटके हुए पार्शियल वेक लॉक: पक्का करें कि हर पार्शियल वेक लॉक को सभी एक्ज़ीक्यूशन और गड़बड़ी वाले पाथ में सही तरीके से रिलीज़ किया गया हो.
- बहुत बार स्क्रीन चालू होना: एग्ज़ैक्ट अलार्म के बजने की संख्या कम करें. साथ ही, शेड्यूल किए गए बैकग्राउंड टास्क को बैच करें या उन्हें बाद के लिए टाल दें.
- बैकग्राउंड में बहुत बार वाई-फ़ाई स्कैन करना: बैकग्राउंड में वाई-फ़ाई स्कैन करने की फ़्रीक्वेंसी कम करें. साथ ही, पैसिव या बैच्ड लोकेशन और कनेक्टिविटी एपीआई का इस्तेमाल करें.
- बैकग्राउंड में नेटवर्क का बहुत ज़्यादा इस्तेमाल करना:
WorkManagerका इस्तेमाल करके, बैकग्राउंड में मोबाइल नेटवर्क से डेटा ट्रांसफ़र करने के लिए बैच और पोस्टपोन करें. - ज़्यादा बैटरी खर्च होना: सीपीयू, सेंसर, और रेडियो ऐक्टिविटी की प्रोफ़ाइल बनाकर, फ़ोन और Wear OS डिवाइसों पर बैटरी के ज़्यादा खर्च होने की समस्या का पता लगाएं.
अनुमतियां और बिल्ड ऑप्टिमाइज़ेशन
- अनुमति न मिलना: रनटाइम की अनुमतियों के लिए, ज़रूरत के मुताबिक अनुरोध करें. साथ ही, उपयोगकर्ताओं को अनुमति के बारे में साफ़ तौर पर बताएं.
- DEX कोड ऑप्टिमाइज़ेशन: R8 के साइज़ को छोटा करने, अस्पष्ट बनाने, और ऑप्टिमाइज़ेशन के नियमों को कॉन्फ़िगर करें, ताकि DEX का साइज़ कम किया जा सके और रनटाइम परफ़ॉर्मेंस को बेहतर बनाया जा सके.