2017-01-19 8 views
5

मेरे पास ए और बी गतिविधियां हैं। जब मैं गतिविधि ए से गतिविधि बी शुरू करता हूं, तो मैंने गतिविधि बी पर स्थिर बिटमैप वैरिएबल सेट किया है। मैं स्क्रीन पर बिटमैप दिखाता हूं और इसे घुमाता हूं।मेमोरी उपयोग में कमी नहीं होती है, फिर भी मैं रीटसायकल बिटमैप्स

जब गतिविधि बी समाप्त हो जाती है, तो मैं ऑनस्ट्रोय() विधि पर सभी बिटमैप्स रीसायकल करता हूं लेकिन स्मृति उपयोग कम नहीं हो रहा है।

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if (bitmap90 != null) { 
     bitmap90.recycle(); 
     bitmap90 = null; 
    } 
    if (bitmap180 != null) { 
     bitmap180.recycle(); 
     bitmap180 = null; 

    } 
    if (bitmap270 != null) { 
     bitmap270.recycle(); 
     bitmap270 = null; 
    } 

    if (mBitmap != null) { 
     mBitmap.recycle(); 
     mBitmap = null; 
    } 

    if (((BitmapDrawable) ivOriginal.getDrawable()).getBitmap() != null) { 
     ((BitmapDrawable) ivOriginal.getDrawable()).getBitmap().recycle(); 
     ivOriginal.setImageDrawable(null); 
    } 

    if (((BitmapDrawable) ivOriginal90.getDrawable()).getBitmap() != null) { 
     ((BitmapDrawable) ivOriginal90.getDrawable()).getBitmap().recycle(); 
     ivOriginal90.setImageDrawable(null); 
    } 

    System.gc(); 
} 
+0

शायद आप कहीं और अपने बिटमैप्स का संदर्भ धारण कर रहे हैं। आम तौर पर स्थैतिक गुणों का उपयोग निराश होता है। आप अपनी बिटमैप्स को फ़ाइल में क्यों नहीं सहेजते हैं और फिर इसे अपनी बी गतिविधि में पढ़ते हैं? –

उत्तर

2
Android Developer

नि: शुल्क देशी इस बिटमैप के साथ जुड़े वस्तु से

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

रीसायकल बस यह सुनिश्चित करता है कि जब भी जीसी कहा जाता है तो आपका बिटमैप पुनर्नवीनीकरण किया जाएगा। सिस्टम.gc के लिए भी चला जाता है, यह सुनिश्चित नहीं कर सकता कि जीसी अभी चलाएगा, यह सिर्फ जीसी को चलाने के लिए कहेंगे, लेकिन जीसी केवल तभी चलाएगा जब सिस्टम इसे चलाने के लिए चलाएगा।

तो बस आराम करें, अगर आप बिटकमैप्स रीसाइक्लिंग कर रहे हैं तो उन्हें रीसाइक्लिंग किया जाएगा, अंततः इसे कुछ समय दें।

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