परफ़ॉर्मेंस से जुड़ी सामान्य समस्याओं को हल करना

ऐप्लिकेशन को बेहतर, भरोसेमंद, और बैटरी की कम खपत करने वाला बनाने के लिए, यह ज़रूरी है कि परफ़ॉर्मेंस से जुड़ी सामान्य समस्याओं की पहचान की जाए और उन्हें ठीक किया जाए. ये समस्याएं, ऐप्लिकेशन के क्रैश या फ़्रीज़ होने, यूज़र इंटरफ़ेस (यूआई) रेंडरिंग, मेमोरी की खपत, बैकग्राउंड में होने वाले काम, स्टार्टअप में लगने वाले समय, और बिल्ड ऑप्टिमाइज़ेशन से जुड़ी हो सकती हैं.

इस सेक्शन में मौजूद गाइड में, हर तरह की समस्या के लिए 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 में मेमोरी फ़ुटप्रिंट को प्रोफ़ाइल करने का तरीका जानें.
  • मेमोरी का इस्तेमाल (बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी और स्वैप मेमोरी): फ़ोरग्राउंड, सेवा, और बैकग्राउंड की स्थितियों में, अपने ऐप्लिकेशन की बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी और स्वैप मेमोरी के फ़ुटप्रिंट को मेज़र करें और कम करें.
  • बिट मैप के लिए मेमोरी का इस्तेमाल: बड़े साइज़ वाले या लीक हुए बिट मैप के लिए मेमोरी के आवंटन का पता लगाएं. साथ ही, यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट के बैकग्राउंड में जाने पर ग्राफ़िक बफ़र रिलीज़ करें.

बैटरी और बैकग्राउंड में होने वाले काम

अनुमतियां और बिल्ड ऑप्टिमाइज़ेशन

  • अनुमति न मिलना: रनटाइम की अनुमतियों के लिए, ज़रूरत के मुताबिक अनुरोध करें. साथ ही, उपयोगकर्ताओं को अनुमति के बारे में साफ़ तौर पर बताएं.
  • DEX कोड ऑप्टिमाइज़ेशन: R8 के साइज़ को छोटा करने, अस्पष्ट बनाने, और ऑप्टिमाइज़ेशन के नियमों को कॉन्फ़िगर करें, ताकि DEX का साइज़ कम किया जा सके और रनटाइम परफ़ॉर्मेंस को बेहतर बनाया जा सके.