2015-01-13 13 views
6

सामग्री को देखने मैं इस अपवाद मिल गया है सेट करते समय। मैं पहले से ही द्वारा इस अपवाद को संभालने की कोशिश की है:java.lang.outofmemoryerror android.graphics.BitmapFactory.nativeDecodeAsset (मूल निवासी विधि)

try{ 
    setContentView(R.layout.activity_main); 

}catch (OutOfMemoryError e) { 
     e.printStackTrace(); 
    } 

यह अपवाद 100 समय से बाहर लगभग जबकि परीक्षण 5 आया था। लेकिन मैं इस मुद्दे को हल करने में असमर्थ हूं। या अन्यथा मेरी क्यूए टीम मुझे इस :(पर

+1

गतिविधि_माइन –

+2

में छोटे आकार/पुनर्वसन छवि का उपयोग करें अपवाद यह है कि आप छवि दृश्य में या पृष्ठभूमि में बहुत अधिक रिज़ॉल्यूशन/आकार छवि लोड कर रहे हैं जो आउटपुट मेमोरी एरर –

+1

हाय आर्स्लान के कारण स्मृति की अनुमति से अधिक बह रहा है, कृपया अपनी छवियों को आकार में बहुत अधिक जांचें और संभवतः 9 पैच छवियों का उपयोग करने का प्रयास करें। क्योंकि यह निश्चित रूप से स्मृति खपत को कम करेगा। – droidd

उत्तर

9

वहाँ इस प्रकार की त्रुटि को हल करने के कई तरीके हैं मार डालेगा आमतौर पर यह है अपनी छवि संकल्प अपने लेआउट पर बहुत अधिक है क्योंकि यहाँ अपने विकल्प हैं:।।

  1. कम रिज़ॉल्यूशन छवि (कम पिक्सल)। यही कारण है, स्वीकार्य नहीं हो सकता है के लिए पूछें लेकिन अपनी टीम को स्मृति की कमी के प्रति जागरूक होना चाहिए।

  2. लेआउट से छवि (ओं) को हटा दें, लेकिन ImageView तत्वों छोड़ , अगर कोई है। अगर यह पृष्ठभूमि है, तो पृष्ठभूमि को हटा दें। फिर छवियों को लोड करने के लिए जावा का उपयोग करें iciently। आपको उन तत्वों के स्क्रीन आकार और/या आकार को मापने की आवश्यकता होगी जिन्हें आप लोड करने से पहले छवियों को चाहते हैं। एंड्रॉयड डॉक्स यहाँ एक महान उदाहरण है:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

  1. बढ़ाएँ अपने अनुप्रयोग के लिए "heapSize"। यह एक अंतिम परिणाम है! अन्यथा, आप की संभावना भविष्य में एक ही त्रुटि में चला जाएगा और फिर इसे उपरोक्त विधियों में से एक का उपयोग कर हल करने के लिए है ... और अपने क्यूए वास्तव में आप तो अच्छा नहीं लगेगा!

How to increase heap size of an android application?

यह भी संभव है कि आप किसी अन्य स्क्रीन पर छवियों संदर्भित कर रहे हैं या नहीं तो एक स्मृति रिसाव है, ऐसी स्थिति में आप किसी भी/सभी कोड है कि समीक्षा करने की आवश्यकता: यहाँ heapSize पर एक संदर्भ है इससे पहले कि वे लीक कहां हैं, यह जानने के लिए (अन्य गतिविधियों सहित) कहा जाता है। संभावित कारण एक पृष्ठभूमि धागा या सेवा के लिए एक Activity गुजर बजाय केवल यह प्रसंग है गुजर, छवियों स्थिर संदर्भ बनाने जैसी चीजों, WeakReference का उपयोग नहीं कर बड़े स्मृति वस्तुओं वस्तुओं के लिए संदर्भ के लिए अन्य थ्रेड/प्रक्रियाओं, या अन्य असामान्य दृष्टिकोण के लिए पारित संभाल करने हैं ।

1

कोड परंतु जरूरी OutOfMemoryError का कारण नहीं है। OutOfMemory के लिए प्राथमिक कारण है कि JVM जीसी आपके ऑपरेशन आगे नहीं बढ़ सकता मुक्त पर्याप्त स्मृति के लिए है।

मान लें कि सेटकंटेंट व्यू वास्तव में भारी ऑपरेशन है, और छवि के संकल्प आकार को घटाना, इसे थोड़ी देर के लिए हल करेगा, यह समस्या अलग-अलग समय में सिस्टम में एक अलग जगह पर फिर से दिखाई देगी।

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

मैं आपके आवेदन के लिए एक प्रोफाइलर का उपयोग करने का सुझाव दूंगा, यह ट्रैक करने के लिए कि आपके आवेदन में स्थान आवंटित और साफ़ किया गया है। एंड्रॉइड के साथ डिफ़ॉल्ट रूप से आपके पास मानक एक है।

2

के रूप में अन्य लोगों को इस वजह से एप्लिकेशन स्मृति रिसाव हो रही है या आपके एप्लिकेशन बहुत अधिक स्मृति का उपयोग कर रहा है क्या हो रहा है से उल्लेख किया है।

पहले अपनी लेआउट फ़ाइल में परतों की संख्या को कम करने का प्रयास करें, यह शायद समस्या को हल करेगा। यदि यह MAT प्लगइन स्थापित नहीं करता है, तो इसका उपयोग करके आप अपने ऐप द्वारा रनटाइम पर उपयोग की जा रही मेमोरी की मात्रा देख सकते हैं। अपने लेआउट फ़ाइल में परतों की संख्या कम है कि ज्यादातर शायद काम करेगा

: वहाँ एक संभावना पिछले गतिविधि खोला उससे पहले अपनी गतिविधि स्मृति को रिहा नहीं किया गया है या विचारों को ठीक से में सूची/ग्रिड पुनर्नवीनीकरण किया जा रहा नहीं कर रहे हैं

पुनश्च हो सकता है

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