2011-08-30 11 views
23

मैं इंटरनेट से संगीत स्ट्रीम करने के लिए एक ऐप पर काम कर रहा हूं ... मेरा ऐप कई चीजें करता है और यह इस तरह से संरचित है: मेरे पास एक टैब दृश्य है और प्रत्येक दृश्य स्मृति में आवंटित किया जाता है इसलिए हर बार मैं उन टैबों के माध्यम से नेविगेट करता हूं जिन्हें मुझे पिछली स्थिति मिलती है (प्रत्येक टैब इंटरनेट में गानों, समाचार इत्यादि के बारे में जानकारी खोजने के लिए एक वेबव्यू भी खोल सकता है) .. जो मेमोरी व्यवसाय बढ़ता है लेकिन ऐप को बहुत उपयोगकर्ता के अनुकूल बनाता है ... ध्यान देने के बाद एंड्रॉइड गाइड के बाद मेमोरी लीक से बचने के लिए, मैंने ढेर व्यवसाय को देखने की कोशिश की और मैंने पाया कि मेरा ऐप अधिकतम 3.5 एमबी मेमोरी आवंटित करता है और आवंटित ढेर आकार 4.5 - 4.6 एमबी है ... मैं एमुलेटर पर काम कर रहा हूं। वे मुझे इतना नहीं सोचते हैं, लेकिन कभी-कभी मेरा ऐप लॉगकैट में संस्थापक को पुनरारंभ किया जाता है जैसेएंड्रॉइड बढ़ते ढेर के मामले

Grow heap (frag case) to 3.373 for 19764-byte allocation 

यह क्या है? एक एमुलेटर मुद्दा? या कुछ और? क्या मैं बहुत अधिक स्मृति का उपयोग कर रहा हूँ?

किसी भी मदद :)

उत्तर

35

अधिकतम ढेर आकार डिवाइस पर निर्भर करता के लिए अग्रिम रूप से धन्यवाद (आप Runtime.getRuntime().maxMemory() फोन करके कि मूल्य प्राप्त कर सकते हैं), लेकिन यह शायद 32MB के आसपास है। स्मृति को सहेजने के लिए, एंड्रॉइड स्वचालित रूप से प्रत्येक ऐप को अधिकतम मेमोरी आवंटित नहीं करता है। इसके बजाए यह तब तक इंतजार कर रहा है जब तक ऐप को अधिक मेमोरी की आवश्यकता न हो और फिर इसे अधिकतम ढेर स्पेस दें जब तक कि यह अधिकतम तक नहीं पहुंच जाता। मेरा मानना ​​है कि यह Grow heap संदेश है जो आप देखते हैं।

यदि आप बहुत मेमोरी आवंटन और मुक्त करते हैं, तो आप विखंडन की समस्याओं में भाग सकते हैं। विकिपीडिया में एक सभ्य वर्णन here है, लेकिन मूल रूप से इसका मतलब है कि आपके पास आवश्यक स्मृति उपलब्ध हो सकती है, बस एक ही हिस्से में नहीं। इसलिए ढेर बढ़ने की जरूरत है।

तो अपने प्रश्नों के उत्तर देने के लिए, शायद यह एक एमुलेटर मुद्दा नहीं है, यह केवल आपके प्रोग्राम की प्रकृति है, जो थोड़ा स्मृति भारी लगता है। हालांकि यह एक बुरी बात नहीं है। मुझे नहीं लगता कि वेबव्यू के साथ कई टैब के लिए 3-5 एमबी का उपयोग करना बहुत अधिक है।

+0

ओह उत्तर के लिए धन्यवाद ^^ यह एक बुरी बात क्यों नहीं है? मेरा ऐप निकलता है जब ऐसा होता है ... मुझे लगता है कि यह बुरा है ... मेरी गलती? मुझे एक और संदेश मिलता है: हेपवर्कर wedged है: 1312 9 एमएम लैंड्रॉइड/मीडिया/मीडियाप्लेयर के अंदर बिताया; फाइनलाइज() वी ... क्या आप जानते हैं यह क्या है? – Erenwoid

+0

हाँ, अगर आपका ऐप बाहर निकल रहा है, तो यह बुरा है। मेरा मतलब है कि कई वेब पृष्ठों के लिए केवल ~ 4 एमबी ढेर का उपयोग करना बुरा नहीं है। मुझे 'हेपवर्कर' मुद्दे के बारे में बहुत कुछ पता नहीं है। आम तौर पर यह आवंटित स्मृति का ट्रैक रखता है और अप्रयुक्त वस्तुओं पर कचरा कलेक्टर चलाता है। मेरा अनुमान है कि आपके धागे में से एक सभी सीपीयू का उपयोग कर रहा है, और 'मीडियाप्लेयर' को 'अंतिमकरण') चलाने के लिए समय नहीं दिया गया है, जो एक ऐसा कार्य है जिसे निश्चित रूप से 13 सेकंड नहीं लेना चाहिए। –

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