2013-06-28 5 views
5

मैं देख रहा हूँ के साथ के बीच क्या अंतर दो पंक्तियों हमेशा एक साथ कर रहे हैं के बिना:यदि यह सेट myBitmap = अशक्त रीसायकल(), रीसायकल()

myBitmap.recycle(); 
myBitmap = null; 

यदि मैं केवल का उपयोग करें:

myBitmap = null; 

क्या फर्क ?

धन्यवाद।

+1

उत्तर के लिए यहां देखें: http://stackoverflow.com/questions/6260787/diff-b-w-bitmap-recycle-and-bitmap-null – Voicu

उत्तर

7

प्रलेखन के अनुसार:

public void recycle() 

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

तो बुनियादी तौर पर,

myBitmap = null; 

निकालता है कि बिटमैप के लिए विशेष संदर्भ में यह करने के लिए इंगित करता है। यदि यह एकमात्र संदर्भ है, तो कचरा कलेक्टर द्वारा बिटमैप को साफ किया जाएगा।

हालांकि,

myBitmap.recycle(); 
myBitmap = null; 

कि बिटमैप के लिए पिक्सेल डेटा को एक छिपे हुए संदर्भ को निकालता है। यह फिर बिटमैप के लिए आपके विशिष्ट संदर्भ को हटा देता है। तो दोनों कचरा इकट्ठा किया जाएगा। जब तक कि आपके पास एक बड़ा बिटमैप नहीं है, या किसी कारण से सीमित स्मृति है, तो शायद आपको myBitmap.recycle() को कॉल करने के बारे में चिंता करने की आवश्यकता नहीं है।

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