मैं कई बड़े ड्रॉबल्स के साथ काम करता हूं और मुझे नहीं पता कि मेमोरी लीक कैसे प्रबंधित करें। मैंने अपने आवेदन के ढेर आकार को ट्रैक किया और यह बढ़ने से नहीं रोकता (आवंटित स्मृति के रूप में)।एंड्रॉइड ड्रायबल्स मेमोरी लीक
यह विशेष रूप से "बाइट सरणी (बाइट [])" प्रकार है जो बढ़ता है और कभी कम नहीं होता है। (ग्रहण पर डीडीएमएस हीप व्यू में)
मेरा आवेदन एक गतिविधि से बना है जो टुकड़ों का उपयोग करता है। वे टुकड़े कई बड़ी छवियों को प्रदर्शित कर रहे हैं। मैंने ड्रॉबल्स कॉलबैक को शून्य पर सेट करने की कोशिश की, ड्रॉबल्स को शून्य पर सेट करें, मेरे अस्थिर कैश को साफ़ करें (जो मेरे ऐप को बहुत अधिक डिस्क IO करने से रोकता है) जब मैं एक टुकड़ा वापस पॉप करता हूं लेकिन ढेर कभी कम नहीं होता है।
वास्तव में, हर बार जब मैं कॉल करता हूं: Drawable.createFromResourceStream (context.getResources(), मान, नया FileInputStream (f), f.getName(), opts); ढेर बढ़ता है। मैं स्मृति कैसे मुक्त कर सकता हूं?
धन्यवाद!
मैं आवेदन संदर्भ और नहीं गतिविधि संदर्भ संदर्भ, आपको लगता है मुद्दा यह है कि मेरे टुकड़े को नष्ट कर दिया कभी नहीं रहे हैं और वे रिसाव है? – abecker
हो सकता है कि –
लीक करने वाली ऑब्जेक्ट्स को ढूंढने के लिए एसडीके मेमोरी विश्लेषण टूल (MAT) का उपयोग करने के तरीके के बारे में मेरे उत्तर में वीडियो देखें, हे! मैंने अपना मुद्दा हल किया! वास्तव में, मेरे टुकड़े स्मृति में रखा गया था और यह मेरे स्थिर अस्थिर कैश था जो इसे रखा था। मुझे सच में नहीं पता कि यह व्यवहार क्यों है। मैंने एक DrawableManager को इंस्टाल किया, जब मैं एक टुकड़ा बनाता हूं, जिसमें डिस्क से या नेटवर्किंग द्वारा ड्रायबल्स को पुनर्प्राप्त करने के कई तरीके हैं। जब यह मेरे विचारों में से एक को वितरित करता है, तो यह इसे एक स्थिर हैश मैप में रख रहा था (इस कैश को मेरे अन्य टुकड़ों में पुन: उपयोग करने के लिए)। मैं बस अपना हैश मैप कोई स्थिर नहीं करता (टुकड़ों के बीच अस्थिर कैश का पुन: उपयोग नहीं कर सकता)। मुझे नहीं पता कि मेरा टुकड़ा स्मृति में क्यों रखा गया था। – abecker