मैंने 4 पूरे दिन बिताए, मैं जिस ऐप को विकसित कर रहा हूं, उसमें मेमोरी लीक का पता लगाने के लिए मैं सब कुछ करने की कोशिश कर रहा हूं, लेकिन कुछ समय पहले चीजों को समझना बंद हो गया।
मैं जो एप्लिकेशन विकसित कर रहा हूं वह सामाजिक प्रकृति का है, इसलिए प्रोफ़ाइल गतिविधियों (पी) और डेटा के साथ गतिविधियों की सूची सोचें - उदाहरण के लिए बैज (बी)। आप प्रोफाइल से बिल्ला सूची से अन्य प्रोफाइल, अन्य सूचियों, आदि के लिए आशा कर सकते हैं।
तो इस P1 -> B1 -> P2 -> B2 -> P3 -> B3, इत्यादि जैसे प्रवाह की कल्पना करें। संगति के लिए, मैं एक ही उपयोगकर्ता की प्रोफाइल और बैज लोड कर रहा हूं, इसलिए प्रत्येक P पेज एक जैसा है और ऐसा ही है। प्रत्येक बी पेज।
समस्या का सामान्य सार यह है: बिट के लिए नेविगेट करने के बाद, प्रत्येक पृष्ठ के आकार के आधार पर, मुझे यादृच्छिक स्थानों - बिटमैप्स, स्ट्रिंग्स, आदि में एक आउट-ऑफ-मेमोरी अपवाद मिलता है - यह सुसंगत प्रतीत नहीं होता है।
सब कुछ करने के लिए कल्पना करने के बाद कि मैं स्मृति से बाहर क्यों भाग रहा हूं, मैं कुछ भी नहीं लेकर आया हूं। मुझे समझ में नहीं आता है कि एंड्रॉइड पी 1, बी 1, आदि को क्यों नहीं मार रहा है अगर यह लोडिंग पर मेमोरी से बाहर निकलता है और इसके बजाय क्रैश होता है। मैं उम्मीद करूंगा कि यदि मैं कभी भी onCreate () और onRestoreInstanceState () के माध्यम से वापस आ जाऊं, तो ये पहले की गतिविधियां मर जाएंगी और पुनर्जीवित हो जाएंगी।
इसे अकेले ही करें - भले ही मैं P1 -> B1 -> पीछे -> B1 -> पीछे -> B1 करता हूं, फिर भी मुझे एक दुर्घटना मिलती है। यह स्मृति रिसाव के कुछ प्रकार को इंगित करता है, फिर भी hprof डंप करने और MAT और JProfiler का उपयोग करने के बाद भी, मैं इसे इंगित नहीं कर सकता।
मैंने वेब से छवियों को लोड करना अक्षम कर दिया है (और इसके लिए बनाने और परीक्षण को उचित बनाने के लिए लोड किए गए परीक्षण डेटा में वृद्धि की है) और यह सुनिश्चित किया है कि छवि कैश सॉफ्टरियर्स का उपयोग करती है। एंड्रॉइड वास्तव में इसके पास मौजूद कुछ SoftReferences को मुक्त करने की कोशिश करता है, लेकिन इससे पहले कि यह स्मृति से बाहर निकल जाए।
बैज पेज वेब से डेटा प्राप्त करते हैं, इसे एक आधार एडेप्टर से EntityData की एक सरणी में लोड करते हैं और इसे एक ListView को खिलाते हैं (मैं वास्तव में कॉमन्सवेयर के उत्कृष्ट मर्ज एडेप्टर का उपयोग कर रहा हूं , लेकिन इस बैज गतिविधि में, वास्तव में 1 एडेप्टर वैसे भी है, लेकिन मैं इस तथ्य का या तो रास्ता बताना चाहता था)।
मैं कोड के माध्यम से चला गया हूं और ऐसा कुछ भी नहीं पा रहा था जो लीक हो। मैंने अपना सबकुछ साफ़ कर दिया और मुझे और यहां तक कि सिस्टम। Gc () को छोड़ दिया और दाएं लेकिन फिर भी ऐप क्रैश हो गया।
मुझे अभी तक समझ में नहीं आया कि निष्क्रिय गतिविधियाँ जो स्टैक पर क्यों हैं, फिर से नहीं मिलती हैं, और मुझे वास्तव में यह पता लगाना अच्छा लगेगा।
इस बिंदु पर, मैं किसी भी संकेत, सलाह, समाधान की तलाश कर रहा हूं ... कुछ भी जो मदद कर सकता है।
धन्यवाद।
outOfMemory
त्रुटि मिलती है । धन्यवाद!