मेरे एप्लिकेशन स्रोत में निम्न पंक्ति में एक OOM त्रुटि मार जाता है:एंड्रॉयड: BitmapFactory.decodeStream() 2 एमबी मुफ्त ढेर के साथ एक 400KB फ़ाइल के साथ स्मृति से बाहर
image = BitmapFactory.decodeStream(assetManager.open(imgFilename));
से ठीक पहले आवंटन कि का कारण बनता है एप्लिकेशन को किसी OOM त्रुटि के साथ मारे जाने के लिए:
Heap Size: 5.254 MB
Allocated: 2.647 MB
Free: 2.607 MB
%Used: 50.38%
#Objects 49,028
:
(...)
08-05 21:22:12.443: I/dalvikvm-heap(2319): Clamp target GC heap from 25.056MB to 24.000MB
08-05 21:22:12.443: D/dalvikvm(2319): GC_FOR_MALLOC freed <1K, 50% free 2709K/5379K, external 18296K/19336K, paused 58ms
08-05 21:22:14.513: D/dalvikvm(2319): GC_EXTERNAL_ALLOC freed <1K, 50% free 2709K/5379K, external 18296K/19336K, paused 101ms
08-05 21:22:14.903: I/dalvikvm-heap(2319): Clamp target GC heap from 25.073MB to 24.000MB
08-05 21:22:14.903: D/dalvikvm(2319): GC_FOR_MALLOC freed 0K, 50% free 2709K/5379K, external 18312K/19336K, paused 53ms
08-05 21:22:22.843: D/ddm-heap(2319): Heap GC request
08-05 21:22:22.963: I/dalvikvm-heap(2319): Clamp target GC heap from 25.073MB to 24.000MB
08-05 21:22:22.963: D/dalvikvm(2319): threadid=1: still suspended after undo (sc=1 dc=1)
08-05 21:22:22.963: D/dalvikvm(2319): GC_EXPLICIT freed 1K, 50% free 2710K/5379K, external 18312K/19336K, paused 116ms
डी डी एम एस ढेर की स्थिति के बारे में एक समान चित्र की रिपोर्ट 210
एक OOM गलती से यह लाइन परिणामों पर एकल स्टेपिंग:
08-05 21:26:04.783: D/dalvikvm(2319): GC_EXTERNAL_ALLOC freed <1K, 50% free 2710K/5379K, external 18312K/19336K, paused 57ms
08-05 21:26:05.023: E/dalvikvm-heap(2319): 2097152-byte external allocation too large for this process.
08-05 21:26:05.163: I/dalvikvm-heap(2319): Clamp target GC heap from 25.073MB to 24.000MB
08-05 21:26:05.163: E/GraphicsJNI(2319): VM won't let us allocate 2097152 bytes
08-05 21:26:05.163: D/dalvikvm(2319): GC_FOR_MALLOC freed 0K, 50% free 2710K/5379K, external 18312K/19336K, paused 30ms
08-05 21:26:05.283: D/skia(2319): --- decoder->decode returned false
- "imgFileName" द्वारा संदर्भित फ़ाइल का आकार विंडोज पर < 400K होने की सूचना दी है। तो BitmapFactory.decodeStream 2 एमबी आवंटित करने का प्रयास क्यों करता है?
- पर्याप्त खाली जगह होने पर ओओएम त्रुटि क्यों होती है?
यह ऐप एंड्रॉइड 2.2 और ऊपर लक्षित कर रहा है।
अग्रिम धन्यवाद!
गतिशील रूप से नमूना आकार में गणना करने के लिए छवि आकार की गणना कैसे कर सकता है? – NinjaCoder
मैंने आपके प्रश्न के उत्तर सहित प्रश्न संपादित किया है! –
स्क्रीन का आकार छवि का आकार नहीं है। मेरे पास एक ऐसा एप्लिकेशन है जो उपयोगकर्ता को फोटो लेने या चुनने देता है। एक तस्वीर लेना डिवाइस के पूर्ण कैमरा संकल्प या सेटिंग्स के आधार पर कम इस्तेमाल कर सकता है। एक फोटो चुनना * किसी * आकार का हो सकता है और इसे पिकासा स्टोरेज इत्यादि के कारण स्थानीय नहीं होना चाहिए। इसलिए मेरे ऐप को यूआरआई वापस मिल जाता है। यह जानने का कोई तरीका नहीं है कि उस यूआरआई के नीचे क्या है और न ही आकार पता है। तो मैं नमूना आकार को क्या सेट करूं? मुझे विश्वास नहीं है कि ऐसा करने का कोई अच्छा तरीका नहीं है। – Paul