2013-08-26 9 views
12

Bitmap.recycle() के एंड्रॉयड संदर्भ दस्तावेज के अनुसार:क्या इसे इस्तेमाल किए जाने के बाद Bitmap.recycle() को कॉल करने की आवश्यकता है (एंड्रॉइड में)?

नि: शुल्क देशी इस बिटमैप के साथ जुड़े वस्तु, और पिक्सेल डेटा को संदर्भ साफ़ करें। यह पिक्सेल डेटा तुल्यकालिक रूप से मुक्त नहीं करेगा; अगर कोई अन्य संदर्भ नहीं है तो यह बस कचरा इकट्ठा करने की अनुमति देता है। बिटमैप के रूप में "मृत" चिह्नित है, जिसका अर्थ यह एक अपवाद getPixels अगर() या setPixels() कहा जाता है फेंक देंगे, और कुछ भी नहीं आकर्षित करेगा। इस ऑपरेशन को उलट नहीं किया जा सकता है, इसलिए को केवल तभी बुलाया जाना चाहिए यदि आप सुनिश्चित हैं कि बिटमैप के लिए कोई और उपयोग नहीं है। यह एक उन्नत कॉल, कहा जाता है की जरूरत नहीं है जब वहाँ इस बिटमैप करने के लिए कोई अधिक संदर्भ हैं सामान्य जीसी प्रक्रिया इस मेमोरी खाली होगा के बाद से है, और सामान्य रूप से।

लेकिन, मैंने पढ़ी कई किताबें बिटमैप.रेकल() को कॉल करके मुफ्त मेमोरी का सुझाव देती हैं, एक बार सुनिश्चित करने के लिए अब इसकी आवश्यकता नहीं है। यह प्रयोग किया जाता के बाद Bitmap.recycle() कॉल करने के लिए की जरूरत है:

यह मुझे उलझन में है?

+2

जीसी बिटमैप को तब तक मुक्त कर देगा जब इसका उपयोग नहीं किया जाता है, लेकिन 'रीसायकल()' को कॉल करने से जीसी को यह जांचने में मदद मिलेगी कि स्मृति का वह हिस्सा मुफ्त है या नहीं। बिटकमैप्स को लोड और अनलोड करने पर 'रीसायकल()' को कॉल करना (जैसे किसी सूची या गैलरी में) एक अच्छा अभ्यास हो सकता है –

उत्तर

1

यह आवश्यक नहीं है, लेकिन अत्यधिक अनुशंसा की जाती है! यह मेमोरी फ्रीिंग प्रक्रिया को तेज करेगा और आउट ऑफ़ मेमोरी अपवाद के साथ आपको यातना से बचाएगा।

मैं अपने अनिवार्य कहना है अगर आप बिटमैप के साथ किसी भी गंभीर एक स्मृति व्यापक काम करने जा रहे हैं होगा।

0

पहले Android 3.0 बिटमैप allocs देशी स्मृति यह पिक्सल है स्टोर करने के लिए, और रीसायकल() कॉल कि इस क्षेत्र में हटा दें।

यहां तक ​​कि जीसी वहाँ अभी भी इसके लिए कोई संदर्भ है कि अगर मेमोरी खाली करने की गारंटी ins't साथ

लेकिन यह कॉल ऐसा लगता है कि जीसी को बेहतर काम करने में मदद करता है, मैंने एक ऐप विकसित किया है जो मेमोरी का व्यापक उपयोग करता है और नए उपकरणों में चल रहा है या नहीं, यह ऐप चलाता है या नहीं, पुराने के लिए यह वास्तव में कुछ प्रदर्शन में सुधार करता है) ।

17

यह निर्भर करता है।

यदि आप एंड्रॉइड 3.0 और उसके बाद के संस्करण पर अपना ऐप चलाते हैं, तो इसकी आवश्यकता नहीं है क्योंकि जीसी पूरी तरह से इसका ख्याल रखेगा।

हालांकि, यदि आप अपने ऐप को पुराने संस्करणों पर चलाते हैं, चूंकि बिटमैप्स जीसी द्वारा अच्छी तरह से निगरानी नहीं करते हैं (ऐसा लगता है कि वे एक संदर्भ का आकार हैं), तो आप Google IO व्याख्यान here पर दिखाए गए ओओएम प्राप्त कर सकते हैं ।

किसी भी मामले में, आपको अभी भी रीसायकल को कॉल करने की अनुशंसा की जाती है जैसे ही आपको यकीन है कि आपको बिटमैप की आवश्यकता नहीं है। यह भी नया एंड्रॉयड संस्करणों के लिए अच्छा है, क्योंकि यह काम स्वचालित स्मृति प्रबंधन के लिए आवश्यक कम करती है ...

वास्तव में, मुझे याद है मैं एक ऐसी ही सवाल here पूछा है।

इसके अलावा, यदि आपको जेएनआई का उपयोग करके बिटमैप्स के अतिरिक्त नियंत्रण की आवश्यकता है, तो this post देखें।

तो, संक्षेप में, जवाब यह है कि अब इसकी आवश्यकता नहीं है, लेकिन अभी भी अनुशंसित है।

संबंधित मुद्दे

 संबंधित मुद्दे