2011-06-07 12 views
8

हमारा एप्लिकेशन बहुत सारे बिटमैप्स का उपयोग करता है। यह उदाहरण के लिए जी 1, एक्सओओएम पर ठीक काम करता है। लेकिन एचटीसी डिजायर पर आउटऑफमेमरी त्रुटि है। कोड में हम try/catch (OutOfMemoryError e) का उपयोग करते हैं और सभी डिवाइस (इच्छा को छोड़कर) अपवाद फेंक देते हैं, लेकिन एचटीसी सिर्फ ओओएम अपवाद के बिना एप्लिकेशन को मारता है। हमने बिटमैप्स के लिए मेमोरी को 12 एमबी तक सीमित कर दिया और ऐसा लगता है कि इस समाधान ने समस्या को हल किया है, लेकिन ग्राहक को अभी भी एचटीसी डिजायर एचडी पर समस्या है। 12 एमबी प्रतिबंध के साथ भी ओओएम है। (: Droid 16MB,: 24 एमबी, Xoom 48 एमबी G1): यहाँ लॉग हैंएंड्रॉइड 2. * के लिए बिटमैप के लिए कितना मुफ्त ढेर आकार उपलब्ध है यह पता लगाने के लिए कैसे?

06-07 12:03:43.978 E/dalvikvm-heap(29616):1140128-byte external allocation too large for this process. 
06-07 12:03:43.978 E/dalvikvm(29616):Out of memory: Heap Size=12311KB, Allocated=9420KB, Bitmap Size=12139KB, Limit=21884KB 
06-07 12:03:43.978 E/dalvikvm(29616):Trim info: Footprint=15751KB, Allowed Footprint=15751KB, Trimmed=3440KB 
06-07 12:03:43.978 E/GraphicsJNI(29616):VM won't let us allocate 1140128 bytes 

AFAIK उपकरणों के लिए अलग ढेर आकार सीमाओं देखते हैं। मेरी राय में सिस्टम कम से कम 16 एमबी देना चाहिए, लेकिन हमारे पास 12 एमबी के साथ ओओएम है। मेरा सवाल है: एंड्रॉइड 2. * के लिए बिटमैप के लिए कितने मुफ्त ढेर आकार उपलब्ध हैं, यह कैसे पता लगाएं? या कृपया सलाह दें कि इस तरह की समस्या को अन्य तरीकों से कैसे टालना है। एफवाईआई हम कम बिटमैप्स का उपयोग नहीं कर सकते, खासकर जब यह अन्य उपकरणों पर ठीक काम करता है। किसी भी सहायता के लिए अग्रिम रूप से धन्यवाद!

उत्तर

2

आप

Runtime.getRuntime().maxMemory(); 

कोशिश कर सकते हैं या गतिविधि की विधि

getMemoryInfo(ActivityManager.MemoryInfo; 

इसके अलावा, आप गतिविधि के

onLowMemory(); 

विधि ओवरराइड कर सकते हैं, जिसमें आप संभाल कर सकते हैं कि क्या होगा जब गतिविधि बंद होने से पहले, स्मृति समस्या की अधिसूचना प्राप्त करें। और आपको एंड्रॉइड/लिनक्स मेमोरी पर एंड्रॉइड देव से यह answer भी देखना चाहिए।

+1

AFAIK बिटमैप्स बाहरी ढेर पर आवंटित किए जाते हैं। डुनो अगर वे विधियां आपको "सामान्य" और एप्लिकेशन के बाहरी ढेर की जानकारी देगी। यह भी देखें: [यह पोस्ट।] (Http://stackoverflow.com/questions/1945142/bitmaps-in-android) – icyerasor

+0

वे वास्तव में देशी ढेर पर आवंटित किए जाते हैं। लेकिन कम से कम बिटमैप के प्री-हनीकॉम संस्करणों के लिए देशी बिटमैप कोड जावा कोड (पिक्सेल डेटा, सेट पिक्सेल इत्यादि के माध्यम से) से पिक्सेल डेटा से अनुरोध किए जाने पर जावा हीप (एक सरणी के रूप में) को आरक्षित करना सुनिश्चित करता है। उस मामले में जेएनआई देशी पिक्सेल डेटा पर जावा क्षेत्र में प्रतिलिपि बनाता है, इसलिए उपलब्ध जावा हीप स्पेस को भी जांचना आवश्यक है। – tiguchi

0

यह आउटऑफमेमरी अपवाद फ़ाइल से नहीं, स्मृति रिसाव से आता है। क्या आप गतिविधि जीवनशैली विधियों को ओवरराइड कर रहे हैं जैसे ऑनस्टॉप, ऑन रीज़्यूम, ऑन डस्ट्रॉय?

+2

यह बिल्कुल कैसे काम करता है। यदि आप 8 एमपी की छवि को आजमाते हैं और लोड करते हैं तो आप ओओएम का कारण बनेंगे। यह रिसाव कोड होना जरूरी नहीं है। – Bostwickenator

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