5

मुझे अपने एंड्रॉइड एप्लिकेशन के लिए आउटफॉमेरी एरर मिल रहा है, और कुछ भी उलझन में है कि क्या हो रहा है। असल में क्या होता है, मैं इसे पहले कुछ बार चलाने में सक्षम हूं, लेकिन जब मैं इसे से बाहर निकलने का प्रयास करता हूं और फिर इसे फिर से और दोबारा खोलता हूं, तो मुझे स्मृति त्रुटि से बाहर निकलता है।गतिविधि से बाहर निकलने के बाद वास्तविक गतिविधि ऑब्जेक्ट मेमोरी को कैसे रिलीज़ करें?

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

ऐसा करने के बाद, मैंने कुछ अजीब में आने पर, ढेर डंप को देखने के लिए ग्रहण मेमोरी विश्लेषक का उपयोग करने का प्रयास किया। गतिविधि से बाहर निकलने के बाद (लॉन्चर गतिविधि में वापस, और फिर एक बटन के माध्यम से फिर से गतिविधि खोलने के बाद, मैंने मेमोरी विश्लेषक का उपयोग करके हीप डंप के स्क्रीनशॉट लिया। यह पता चला, प्रत्येक बार जब मैंने छोड़ दिया और फिर से प्रवेश किया गतिविधि, गतिविधि ऑब्जेक्ट का एक और उदाहरण बनाया जा रहा था, और पुराने लोगों को रिहा नहीं किया जा रहा था, भले ही ऑनस्ट्रोय() विधि को कॉल किया जा रहा था (जिसमें रीसायकल/क्लीनअप कोड भी था।

मैंने फिर ओवरराइड करने की कोशिश की यह देखने के लिए अंतिम तरीका है कि गतिविधि को लॉन्चर गतिविधि में वापस छोड़ने पर कहा जा रहा था, लेकिन इसे नहीं कहा जा रहा था। मैंने कुछ अन्य स्टैक ओवरफ्लो धागे पर पढ़ा जो अंतिम रूप से() को हमेशा नहीं कहा जाता है, इसलिए अंत में , मुझे अभी भी यकीन नहीं है कि क्या चल रहा है।

आखिरकार, मेरा प्रश्न यह है: मुझे यह सुनिश्चित करना चाहिए कि गतिविधि ऑब्जेक्ट (गतिविधि ऑब्जेक्ट स्वयं, गतिविधि से बनाई गई सामग्री नहीं) गतिविधि से बाहर निकलने के बाद दूसरी गतिविधि में छोड़ दिया जाता है?

+0

आप अपने हीप डंप करने से पहले एक जीसी चलाने के लिए और अभी भी कई उदाहरण देखा है गतिविधि का? यदि ऐसा है, तो आप शायद गतिविधि को किसी तरह से लीक कर रहे हैं। आपके कोड के बिना या आप जो कर रहे हैं उसके बारे में अधिक जानकारी के बिना, अनुमान लगाना मुश्किल है कि यह कैसा चल रहा है। –

+0

क्या आपको समाधान – LMK

+0

मिला, क्या आपको समाधान मिला ?? क्या आप इसे किसी को साझा करना चाहते हैं ?? –

उत्तर

0

एक विकल्प लॉन्च मोड को आपके मैनिफेस्ट फ़ाइल में सिंगल इंस्टेंस या सिंगल टास्क पर सेट कर रहा है। यह सुनिश्चित करेगा कि गतिविधि का एक और उदाहरण नहीं बनाया गया है।

Documentation Example

-1

एक तरह से गतिविधि के अपने वस्तु जारी करने के लिए यह onDestoy बुला रहा है() method..Take अपनी गतिविधि का एक उद्देश्य यह जनता स्थिर बनाने के लिए और यह OnDestroy() में अशक्त बनाने

Public static Your_activity obj; 

और फिर इस

obj=this; 

और OnDestroy में() विधि द्वारा onCreate विधि initalize obj में ऐसा करते हैं:

आप आवेदन की तरह मेमोरी लीक से ग्रस्त
obj= null; 
+0

एक वेरिएबल बनाना जो किसी ऑब्जेक्ट का अतिरिक्त संदर्भ रखता है और इस स्वयं के चर को शून्य पर सेट करता है, ऑब्जेक्ट मेमोरी को रिलीज़ करने के लिए कभी भी मजबूर नहीं होगा। – Udo

3

लगता है, मैं तुम्हें सलाह देते हैं नीचे दिए गए लिंक का पालन करने के:
Avoiding Memory Leaks

Memory management for Android Apps

+2

अरे @ वेगोलाथ आपका पहला लिंक टूटा हुआ है - यहां सही है - [मेमोरी लीक से बचें] (http://android-developers.blogspot.in/2009/01/avoiding-memory-leaks.html) –

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