2016-01-05 5 views
5

मैं Google से मेरा Android एप्लिकेशन के लिए निम्नलिखित अजीब दुर्घटना रिपोर्ट प्राप्त हुई है प्ले (आवंटन की राशि ध्यान दें बनाम मुक्त उपलब्ध स्थान) है -java.lang.OutOfMemoryError एंड्रॉयड 5.0 पर, एक 16k आवंटन की वजह से जब 5M उपलब्ध

java.lang.OutOfMemoryError: Failed to allocate a 16396 byte allocation with 5746272 free bytes and 111MB until OOM 
    at com.android.internal.util.FastXmlSerializer.<init>(FastXmlSerializer.java:55) 
    at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:183) 
    at android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:597) 
    at android.app.SharedPreferencesImpl.access$800(SharedPreferencesImpl.java:51) 
    at android.app.SharedPreferencesImpl$2.run(SharedPreferencesImpl.java:512) 
    at android.app.SharedPreferencesImpl.enqueueDiskWrite(SharedPreferencesImpl.java:533) 
    at android.app.SharedPreferencesImpl.access$100(SharedPreferencesImpl.java:51) 
    at android.app.SharedPreferencesImpl$EditorImpl.commit(SharedPreferencesImpl.java:455) 
    at com.headuck.headuckblocker.bj.a(Unknown Source) 
    at com.headuck.headuckblocker.UpdateService.e(Unknown Source) 
    at com.headuck.headuckblocker.UpdateService.a(Unknown Source) 
    at x.a.onHandleIntent(Unknown Source) 
    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.os.HandlerThread.run(HandlerThread.java:61) 

मुझे एसओ पर कई आउटऑफमेमरी त्रुटि प्रश्नों के बारे में पता है, लेकिन ऐसा लगता है कि उनमें से कोई भी बाइट आवंटन के कारण उपलब्ध खाली स्थान से बहुत छोटा है।

उपयोगकर्ता एंड्रॉइड 5.0 पर गैलेक्सी एस 5 का उपयोग कर रहा था, और बताया कि गेम खेलने के दौरान इस तरह की दुर्घटनाएं होती हैं (और कौन से खेल कोई फर्क नहीं पड़ता) - जो मैं लेता हूं जब भी वह किसी अन्य मेमोरी गहन ऐप का उपयोग कर रहा है अग्रभूमि में और मेरी ऐप की पृष्ठभूमि सेवा चलाने के लिए निर्धारित है। Google Play रिपोर्ट होने के नाते, मेरे पास अधिक जानकारी प्राप्त करने का कोई अन्य साधन नहीं है।

मेरा सवाल यह है कि, संभवतः ऐसा होने का कारण क्या हो सकता है, और किसी भी उपाय से बचने के लिए कोई उपाय क्या हो सकता है?

कुछ पृष्ठभूमि (यदि यह प्रासंगिक है): उपर्युक्त दुर्घटना मेरी ऐप की समय-समय पर निर्धारित पृष्ठभूमि सेवा से है, जिसमें कोई यूआई/बिटमैप शामिल नहीं है। यह सब सर्वर से डेटा डाउनलोड कर रहा है और डेटाबेस/स्थिति अद्यतन कर रहा है। यह 5 साल पुरानी मशीनों में बहुत कम रैम के बिना किसी भी समस्या के बिना भाग गया, और आधुनिक एंड्रॉइड फोन के मानकों द्वारा स्मृति पर बहुत हल्का होना चाहिए। त्रुटि का उपरोक्त उदाहरण डेटाबेस अद्यतन के बाद एक बिंदु पर होता है और सेवा साझा वरीयता में अद्यतन स्थिति लिख रही है।

संपादित करें: केवल OutOfMemoryError in android on allocation 4Mb when 10Mb is free पढ़ें जो पोस्ट करने के बाद इस प्रश्न से जुड़ा हुआ था, लेकिन यह काफी असंभव प्रतीत होता है कि इस मामले में उपलब्ध खाली स्थान इतनी खंडित हो सकता है? क्या कोई अन्य संभावित कारण है?

+0

https://github.com/facebook/fresco/issues/404 https://github.com/facebook/fresco/issues/159 –

उत्तर

0

यदि आप एंड्रॉइड स्टूडियो का उपयोग कर रहे हैं तो अपनी मेनिफेस्ट फ़ाइल में "LargeHeap = true" जोड़ें।

इस तरह;

एंड्रॉयड: largeHeap = "true"

+0

धन्यवाद लेकिन समस्या यह नहीं है कि मेरी सेवा विशेष रूप से भूख लगी है, इसलिए यह निश्चित रूप से एक ओवर-मार है, और इसकी अनुशंसा नहीं की जाती है अभ्यास http://stackoverflow.com/questions/27396892/androidlargeheap-true-in-mainifast-advantages – headuck

+0

मुझे ऐसा नहीं लगता है कि यह सच करने के लिए largeheap जोड़ने के लिए अच्छा विचार है। और स्टैकट्रेस अनुसार कोई बिटमैप आपरेशन oom.http के कारण के लिए किया जाता है: //stackoverflow.com/questions/27396892/androidlargeheap-true-in-mainifast-advantages – mcd

0

मैं वही समस्या का सामना करना पड़ा है। यह है कि मैं क्या हल करने के लिए किया था यह

  1. अपने रेस में एक नया फ़ोल्डर drawable-nodpi/फ़ोल्डर बनाएँ
  2. ले जाएँ सभी/drawable-nodpi फ़ोल्डर में/drawable फ़ोल्डर में "छवियों"

उम्मीद है कि यह किसी की मदद करता है :)

+0

धन्यवाद, शायद दूसरों के लिए उपयोगी, लेकिन मेरी विशेष मामले में यह है किसी भी ड्राइंग का उपयोग किए बिना पृष्ठभूमि प्रक्रिया, इसलिए यह मेरे लिए लागू नहीं है। – headuck

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