बिट मैप के लिए मेमोरी का इस्तेमाल

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

बिटमैप के लिए मेमोरी के ज़्यादा इस्तेमाल की पहचान करना

Android की ज़रूरी जानकारी देने वाली सुविधा, Android डिवाइसों से डेटा इकट्ठा करके, ऐप्लिकेशन की बिटमैप मेमोरी के फ़ुटप्रिंट के बारे में मेट्रिक उपलब्ध कराती है. डिफ़ॉल्ट रूप से, 28 दिनों तक रोज़ाना इकट्ठा किए गए डेटा से मिली खास जानकारी की मदद से, इन मेट्रिक का हिसाब लगाया जाता है. इस डेटा से, अलग-अलग डिवाइस टाइप और वर्शन में मेमोरी की परफ़ॉर्मेंस से जुड़े रुझानों और संभावित रिग्रेशन का पता लगाने में मदद मिलती है.

Android की ज़रूरी जानकारी में, आपके ऐप्लिकेशन की बिट मैप मेमोरी का इस्तेमाल की जानकारी मिलती है. इसे प्रोसेस की इन स्थितियों के हिसाब से बांटा जाता है:

  • फ़ोरग्राउंड: ऐप्लिकेशन की प्रोसेस दिखती है. फ़ोरग्राउंड में, अन्य प्रोसेस की तुलना में P99 काफ़ी ज़्यादा होता है.हालांकि, अगर P99/P50 का अनुपात ज़्यादा है (जैसे, 3.5 गुना से ज़्यादा), तो डेवलपर को इसकी जांच करनी चाहिए.ऐसा इसलिए, क्योंकि इससे अक्सर बिटमैप मेमोरी लीक का पता चलता है. इसके लिए, सामान्य इस्तेमाल (P50) और असामान्य इस्तेमाल (P99) के बीच अंतर देखें. सामान्य ऐसेट ब्लोट, सभी पर्सेंटाइल में मेमोरी को एक जैसा बढ़ाता है. वहीं, मेमोरी लीक समय के साथ बढ़ती है. इससे टेल-एंड डेटा (P99) में काफ़ी अंतर आ जाता है. पक्का करें कि ऐप्लिकेशन के दूसरी स्थितियों में ट्रांज़िशन करने के बाद, फ़ोरग्राउंड बिटमैप के लिए किए गए मेमोरी असाइनमेंट, बिना किसी वजह के बने न रहें.
  • उपयोगकर्ता को दिखने वाली सेवाएं: ऐप्लिकेशन की प्रोसेस, उपयोगकर्ता को दिखने वाली स्थिति में चल रही है. इसमें फ़ोरग्राउंड सेवाएं, तुरंत किए जाने वाले जॉब, और उपयोगकर्ता के अनुरोध पर शुरू होने वाले डेटा ट्रांसफ़र जॉब शामिल हैं. इन स्थितियों में ट्रांज़िशन करते समय, ऐप्लिकेशन को फ़ोरग्राउंड बिटमैप के लिए ज़्यादा मेमोरी का इस्तेमाल नहीं करना चाहिए. इन सेवाओं को लंबे समय तक चलने वाले टास्क के लिए डिज़ाइन किया गया है. इसलिए, बड़ी ऐसेट को बनाए रखने से उपयोगकर्ता अनुभव खराब होता है. साथ ही, लो मेमोरी किलर डेमॉन (एलएमकेडी) को कम प्राथमिकता वाली प्रोसेस को बंद करके मेमोरी वापस लेनी पड़ती है.
  • बैकग्राउंड में चल रहा है: ऐप्लिकेशन बैकग्राउंड में चलने वाली सेवा चला रहा है या हाल ही में बैकग्राउंड में चला गया है. हालांकि, इसे अभी तक कैश मेमोरी में सेव नहीं किया गया है. इस प्रोसेस की स्थिति, फ़ोरग्राउंड या परसीव की जा सकने वाली प्रोसेस की तुलना में कम अहम होती है. इसलिए, ऐप्लिकेशन को यहां बड़ी बिटमैप ऐसेट को साफ़ तौर पर रिलीज़ करना चाहिए, ताकि मेमोरी पर दबाव कम हो.
  • कैश किया गया: ऐप्लिकेशन को कैश किया गया है. यह स्थिति, सिस्टम की मेमोरी पर पड़ने वाले दबाव के हिसाब से बहुत संवेदनशील होती है. जैसे, एलएमके. इस स्थिति में, ऐप्लिकेशन को बिटमैप की मेमोरी के इस्तेमाल को कम करना चाहिए, ताकि ओएस उसे बंद न करे.

बिटमैप के लिए ज़्यादा मेमोरी इस्तेमाल करने वाले कॉम्पोनेंट

यह भी हो सकता है कि कभी इस्तेमाल न की गई वर्चुअल मेमोरी को भी कैलकुलेशन में शामिल किया गया हो. अगर आपको बिटमैप की मेमोरी का इस्तेमाल उम्मीद से ज़्यादा दिखता है, तो पुष्टि करें कि आपने ऐसी मेमोरी असाइन न की हो जिसका इस्तेमाल नहीं किया जाता.