बिटमैप, अक्सर ऐप्लिकेशन में सबसे ज़्यादा मेमोरी इस्तेमाल करने वाले ऑब्जेक्ट होते हैं. डीकोड करने और स्केल करने की कार्रवाइयां, फ़्रेम रेंडरिंग के लिए अक्सर अहम पाथ पर होती हैं. बिटमैप की मेमोरी के इस्तेमाल को ऑप्टिमाइज़ करने से, यूज़र इंटरफ़ेस (यूआई) की परफ़ॉर्मेंस में काफ़ी सुधार होता है. इससे यूआई तेज़ी से काम करता है, बैटरी लाइफ़ बढ़ती है, और ऐप्लिकेशन ज़्यादा स्थिर तरीके से काम करता है. ऐसा इसलिए होता है, क्योंकि बिटमैप की मेमोरी के इस्तेमाल को ऑप्टिमाइज़ करने से, जंक, एएनआर, और ओओएम से जुड़ी प्रोसेस बंद होने की समस्याएं कम हो जाती हैं.
बिटमैप के लिए ज़्यादा मेमोरी इस्तेमाल करने वाले कॉम्पोनेंट
यह भी हो सकता है कि कभी इस्तेमाल न की गई वर्चुअल मेमोरी को भी कैलकुलेशन में शामिल किया गया हो. अगर आपको बिटमैप की मेमोरी का इस्तेमाल उम्मीद से ज़्यादा दिखता है, तो पुष्टि करें कि आपने ऐसी मेमोरी असाइन न की हो जिसका इस्तेमाल नहीं किया जाता.
संसाधन
Android Studio में बिटमैप का विश्लेषण करना
बिटमैप के लिए Android Studio की प्रोफ़ाइलिंग
मेमोरी प्रोफ़ाइलर का इस्तेमाल करके, रीयल-टाइम में मेमोरी के बंटवारे की जांच करें. साथ ही, हीप डंप कैप्चर करें और मेमोरी लीक के लिए ऑब्जेक्ट का विश्लेषण करें. इसके अलावा, हीप ऐनलाइज़र का इस्तेमाल करके मेमोरी लीक का पता लगाएं, डुप्लीकेट बिटमैप के बंटवारे की पहचान करें, और ऑब्जेक्ट रिटेंशन को विज़ुअलाइज़ करें.
LeakCanary की मदद से मेमोरी लीक का अपने-आप पता लगाना
अपने ऐप्लिकेशन में मेमोरी लीक का पता अपने-आप लगाने के लिए, LeakCanary लाइब्रेरी को इंटिग्रेट करें. LeakCanary, हीप का अपने-आप विश्लेषण करता है. इससे उन ऑब्जेक्ट की पहचान होती है जिन्हें कचरा इकट्ठा करने की प्रोसेस के तहत हटा दिया जाना चाहिए था, लेकिन वे अब भी मेमोरी में मौजूद हैं. जैसे, डिस्ट्रॉय किए गए कॉम्पोनेंट से बनाए गए बिटमैप.
बिटमैप परफ़ॉर्मेंस का दस्तावेज़
इन संसाधनों में, अलग-अलग Android कॉम्पोनेंट में बिटमैप को बेहतर तरीके से हैंडल करने के सबसे सही तरीकों के बारे में पूरी जानकारी दी गई है.
बिटमैप के लिए मेमोरी के इस्तेमाल को ऑप्टिमाइज़ करने के लिए डेवलपर की चेकलिस्ट
बिटमैप मेमोरी को ऑप्टिमाइज़ करने के लिए, इन तीन मुख्य सिद्धांतों का पालन करें: कम करें, फिर से इस्तेमाल करें, और रीसाइकल करें.
- कम करें: बिटमैप लोड करते या दिखाते समय, मेमोरी के शुरुआती फ़ुटप्रिंट को कम करें.
- फिर से इस्तेमाल करें: कैश मेमोरी में सेव करने के तरीकों को लागू करें, ताकि बिटमैप को बार-बार असाइन करने से बचा जा सके.
- रीसाइकल करें: सक्रिय प्रोसेस के लिए मेमोरी को फिर से असाइन करने की अनुमति देने के लिए, संसाधनों को पहले से ही रिलीज़ करें.
डेवलपर के लिए यहां दी गई चेकलिस्ट की मदद से, बिटमैप की मेमोरी के इस्तेमाल को ऑप्टिमाइज़ किया जा सकता है.
| मुख्य सिद्धांत | जगह | ब्यौरा |
|---|---|---|
| कम करें | डुप्लीकेट बिटमैप हटाएं | रिडंडेंट बिटमैप के बंटवारे का पता लगाने के लिए, मेमोरी प्रोफ़ाइलर का इस्तेमाल करके हीप डंप का विश्लेषण करें. बिटमैप के लिए मेमोरी मैनेज करना गाइड देखें. |
| इमेज लोड करने वाली लाइब्रेरी का इस्तेमाल करना | थ्रेडिंग, कैश मेमोरी में सेव करने, और बेहतर तरीके से डिकोड करने की प्रोसेस को अपने-आप पूरा करने के लिए, Glide और Coil जैसी लाइब्रेरी का इस्तेमाल करें. | |
| डाउनसैंपलिंग लागू करना | पूरी रिज़ॉल्यूशन वाली ऐसेट लोड करने के बजाय, टारगेट यूज़र इंटरफ़ेस (यूआई) कंटेनर के डाइमेंशन से मेल खाने के लिए, इमेज को डिकोड करें. | |
| ओपेक इमेज के लिए RGB_565 का इस्तेमाल करना | पारदर्शिता के बिना वाली इमेज के लिए, ARGB_8888 से 16-बिट कॉन्फ़िगरेशन पर स्विच करके मेमोरी फ़ुटप्रिंट को 50% तक कम करें. |
|
| VectorDrawable को प्राथमिकता दें | आइकॉन और बेसिक ग्राफ़िक के लिए वेक्टर का इस्तेमाल करें, ताकि कम मेमोरी में ज़्यादा से ज़्यादा शार्प स्केलिंग हो सके. | |
| सर्वर साइड से इमेज डिलीवर करने की सुविधा को ऑप्टिमाइज़ करना | बैकएंड एपीआई को कॉन्फ़िगर करें, ताकि डिवाइस की डेंसिटी के हिसाब से इमेज दिखाई जा सकें. साथ ही, यूज़र इंटरफ़ेस (यूआई) कंटेनर के डाइमेंशन के हिसाब से इमेज दिखाई जा सकें. | |
| पारदर्शी मार्जिन हटाना | बिल्ट-इन मार्जिन के बजाय, InsetDrawable या लेआउट पैडिंग का इस्तेमाल करके, "इनविज़िबल" पिक्सल के लिए मेमोरी असाइन करने से बचें. मेमोरी का कम इस्तेमाल करने वाले Android ऐप्लिकेशन बनाना लेख पढ़ें. | |
| फिर से इस्तेमाल करना | कैश मेमोरी के ऑप्टिमल साइज़ कॉन्फ़िगर करना | डिवाइस की रैम और स्क्रीन रिज़ॉल्यूशन के आधार पर, मेमोरी और डिस्क की कैश मेमोरी की सीमाओं को अपनी ज़रूरत के हिसाब से बनाएं. कैशिंग बिटमैप पर जाएं. |
| रीसाइकल करें | बैकग्राउंड में संसाधनों को पूरी तरह मिटाना | सिस्टम मेमोरी पर दबाव पड़ने के दौरान, कैश मेमोरी मिटाने और प्रोसेस को बेहतर बनाने के लिए, TRIM_MEMORY_BACKGROUND लागू करें. |
| यूज़र इंटरफ़ेस (यूआई) छिपा होने पर ऐसेट रिलीज़ करना | जब ऐप्लिकेशन लोगों को नहीं दिखता है, तब बिटमैप कैश मेमोरी को रिलीज़ करने के लिए, TRIM_MEMORY_UI_HIDDEN का इस्तेमाल करें. |
|
| मेमोरी लीक की निगरानी करना | LeakCanary और Memory Profiler का इस्तेमाल करके, उन बिटमैप का पता लगाएं जिन्हें उनके LifecycleOwner के बंद होने के बाद भी बनाए रखा जाता है. अपने ऐप्लिकेशन की मेमोरी मैनेज करना लेख पढ़ें. |