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