सबसे पहले, सुनिश्चित करें कि आप आवश्यक से बड़े बिटमैप्स लोड नहीं कर रहे हैं:
Load a Scaled Down Version into Memory।
फिर, largeHeap
प्रयास करने से पहले, मुक्त स्मृति करने की कोशिश अपने आप को जल्दी से:
आप जैसे ही आप वाकई एक बिटमैप फिर तो उस के थोक का उपयोग नहीं होगा, कर रहे हैं bitmap.recycle();
को कॉल करते हैं बिटमैप की मेमोरी तुरंत मुक्त हो जाएगी। (जब जीसी इसके आसपास हो जाता है, तो वह सब कुछ एक छोटी वस्तु है।)
नए Android संस्करण पर, वहाँ विकल्प (recycle
के बजाय) है कि और अधिक प्रभावी हो सकता है:
Managing Bitmap Memory
व्यक्तिगत रूप से, मैं अभी भी recycle
अक्सर उपयोग, खासकर अगर मैं एक अलग लोड हो रहा है हो सकता है आकार छवि, इसलिए reuse
मौजूदा नहीं हो सकता है। तो
के रूप में पुराने टुकड़ा छोड़ देते हैं, सभी पुराने बिटमैप्स मैं recycle
(, अगर पहुंच योग्य: इसके अलावा, मैं यह आसान अलग से नए मीडिया के "लोड हो रहा है", से कोड करने के लिए पुराने मीडिया के "उतराई" जब एक अलग टुकड़ा या गतिविधि के लिए बदल रहा है लगता है एक स्थिर क्षेत्र से, null
पर सेट करें)।
कि क्या largeHeap
का उपयोग करने के लिए अंगूठे का नियम है, यह के बाद आप वैकल्पिक तरीकों स्मृति उपयोग को कम करने के लिए कोशिश की है विचार करना है।
कोड अपने अनुप्रयोग ताकि आप यह बंद फिर से बदल सकता है, और अभी भी चलाते हैं।
उदाहरण के लिए, monitor your memory usage, और लोड बिटमैप "छोटा" अगर स्मृति तंग है। क्या उपयोगकर्ता वास्तव में नोटिस करेगा कि दी गई छवि उनके डिवाइस के "रेटिना" रिज़ॉल्यूशन पर नहीं है?
या अगर यह एक पुराने, धीमी, डिवाइस है, largeHeap अपने अनुप्रयोग अनुत्तरदायी/झटकेदार महसूस करते हैं? यदि हां, तो क्या आप संकल्प को और भी आगे छोड़ सकते हैं, या एक बार पर कम बिटमैप्स दिखा सकते हैं?
बिनाlargeHeap
[उपरोक्त तकनीकों द्वारा] के बिना अपने ऐप को सभी परिस्थितियों में काम करने के लिए प्राप्त करें। नोट: आप "फोर्स-टेस्ट" कड़े मेमोरी पर चल रहे हैं, कुछ "डमी" बिटमैप्स आवंटित करके, और वैश्विक क्षेत्रों में उनके संदर्भों को पकड़कर, इसलिए वे मुक्त नहीं हो सकते हैं।
अब आप, व्यापार बंद का मूल्यांकन करने के लिए यह अपने अनुप्रयोग को प्रभावित करता है के रूप में कर सकते हैं:
जब आप पर largeHeap
कर देते हैं, भारी आपके एप्लिकेशन का उपयोग करते हैं - वहाँ स्थानों जहां यह अब "अधिक सुस्त" है, या एनिमेशन "स्टटर" या अन्यथा कम चिकनी लग रहा है? कम से कम एक पुराने डिवाइस पर परीक्षण करने के लिए सुनिश्चित करें, और एक उच्च वितरण डिवाइस पर। बड़े ढेर के कारण आप लंबे समय तक जीसी बार देख सकते हैं।
या आप निष्कर्ष निकाल सकते हैं कि largeHeap
आपके लिए अच्छा काम कर रहा है, और अब आप आत्मविश्वास से कह सकते हैं कि यह आपके परिस्थिति में सबसे अच्छा विकल्प है।
BTW, अगर आप 'bitmap.recycle() कहते हैं;' जैसे ही आप वाकई एक बिटमैप फिर से उपयोग नहीं कर रहे हैं, तो उस बिटमैप की स्मृति के थोक तुरंत मुक्त हो जाएगा। (जब जीसी इसके आसपास हो जाता है, तब भी यह सब एक छोटी वस्तु है।) – ToolmakerSteve