2011-06-07 13 views
9

मैं ऐसी परिस्थिति में हूं जहां मैंने छवियों का एक सेट डाउनलोड करने के लिए लूप का उपयोग किया है और मैं इसे बिटमैप छवियों में परिवर्तित कर रहा हूं। तो OutOfMemory त्रुटि से बचने के लिए, मैं बिटमैप्स रीसायकल करने की कोशिश कर रहा हूं। लेकिन दुर्भाग्य से मैं "View trying to use a recycled bitmap" जैसे कुछ और अपवाद में भाग रहा हूं।डिफ बी/डब्ल्यू बिटमैप.रेकल() और बिटमैप = शून्य

लेकिन फिर भी मुझे bitmap=null का उपयोग करके प्रयुक्त बिटमैप को खाली करने की अनुमति है। तो मेरा सवाल यह है कि, मेरी बिटमैप null बनाने में मुझे उपयोग की गई मेमोरी को मुक्त करने में मदद मिलेगी? या मुझे अपने कोड के किसी अन्य भाग में bitmap.recycle() प्रदान करना चाहिए?

+1

फॉलोइन जी लिंक बिटमैप मेमोरी मैनेजमेंट पर अधिक जानकारी देता है: http://stackoverflow.com/questions/4959485/bitmap-bitmap-recycle-weakreferences-and-garbage-collection –

उत्तर

7

कॉलिंग recycle() सिस्टम को इंगित करता है कि आप उस संसाधन का उपयोग करके समाप्त कर चुके हैं और सिस्टम अब अप्रबंधित स्मृति को मुक्त कर सकता है जो इसका उपयोग कर रहा था। एक बार जब आप इस तरह से संसाधन का निपटारा कर लेते हैं, तो इसका व्यवहार आमतौर पर अनिर्धारित होता है (कोई उचित रूप से काम करने की अपेक्षा करता है)।

संदर्भ बाद में शून्य पर करने हेतु दो लाभ हैं:

  • आप वस्तुओं के लिए बासी संदर्भ है कि जब आप उन्हें
  • कचरा कलेक्टर साफ करने के लिए पता चल जाएगा इस्तेमाल करने की कोशिश काम नहीं करेगा नहीं होगा ऊपर बिटमैप वस्तु की कामयाब ओर, मुक्त कराने के लिए और भी अधिक स्मृति
7

कचरा संग्रह को मजबूर करने के लिए कोई गारंटीकृत तरीका नहीं है, केवल System.gc() का उपयोग करने का सुझाव देने का कोई तरीका नहीं है। चूंकि बिटमैप्स पिक्सेल डेटा दालविक ढेर के बाहर मूल स्मृति में रहता है, इसलिए मूल कार्य प्रदान करता है (इस मामले में recycle()) हमें निश्चित रूप से (अंततः) इस पिक्सेल डेटा को साफ़ करने का मौका देगा। कृपया ध्यान दें कि recycle() का उपयोग करते समय आप उस बिटमैप के साथ और अधिक नहीं कर सकते हैं।

आपके पास जो मुद्दा है वह यह है कि आप बिटमैप पर recycle() पर कॉल कर रहे हैं, जिसे आप अभी भी उपयोग करने का प्रयास कर रहे हैं।

अपने प्रश्न का उत्तर देने के लिए, हाँ, रीसाइक्लिंग के बाद बिटमैप को शून्य पर सेट करना एक अच्छा विचार है, लेकिन यह भी अनावश्यक हो सकता है। जब आप उनके साथ काम करते हैं तो हमेशा अपने बिटमैप्स को रीसायकल करने का प्रयास करें।

+4

'जब आप उनके साथ काम करते हैं तो हमेशा अपने बिटमैप्स को रीसायकल करने का प्रयास करें' यही मेरा सवाल है। मुझे रीसायकल कहां प्रदान करनी चाहिए। यदि मैं लूप के भीतर प्रदान करने का प्रयास करता हूं तो ऐप क्रैश हो जाता है। लेकिन मैं जितना कर सकता हूं उतना रीसायकल करना चाहता हूं। तो मैं अपनी रीसायकल विधि कहां से कर सकता हूं। –

-3

सिर्फ bitmap.recycle() onStop पद्धति पर ............. यू समस्या का समाधान होगा फोन ..

+0

यह गलत है !! जब तक आप नहीं जानते कि 'रीसायकल() 'क्या करता है। – Varun

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