2012-10-02 17 views
7

मुझे libGDX का उपयोग करके 2 डी गेम विकसित करते समय स्मृति खपत के साथ कुछ परेशानी का सामना करना पड़ रहा है।एंड्रॉइड: LibGDX 2D गेम मेमोरी खपत

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

समूह 1 (बनावट अपनाया ~ 840 * 480 स्क्रीन के लिए)

एचटीसी डिजायर (Froyo): 178Mb (देशी) - 12MB (ढेर) - आवेदन लोड सफलतापूर्वक

HTC एक वी (आईसीएस): 30Mb (देशी) - 12MB (ढेर) - आवेदन लोड सफलतापूर्वक

एचटीसी डिजायर एस (Jelly Bean): 30Mb (देशी) - 12MB (ढेर) - आवेदन लोड सफलतापूर्वक

समूह 2 (बनावट के लिए अपनाया ~ 1366 * 768 स्क्रीन)

सैमसंग (गूगल) गैलेक्सी नेक्सस 329Mb (देशी) - 18M ख (ढेर) - काम करता है पूरी तरह से

गैलेक्सी टैब (Honeycomb) 164Mb (देशी) - 10 एमबी (ढेर) - आवेदन दुर्घटनाओं (Surface.OutOfResouresException)।

मुझे लगता है कि सभी एंड्रॉइड संस्करणों पर कुछ महत्वपूर्ण स्मृति प्रबंधन अंतर हो सकता है, जो मुझे इन परेशानियों को लाता है।

कोई भी बता सकता है कि एंड्रॉइड 3.x पर बनावट लोड करते समय वास्तव में क्या होता है? या शायद इस समस्या को हल करने के लिए क्या करने की आवश्यकता है यह समझने के लिए कुछ लिंक पोस्ट करें।

कुछ अद्यतन

चापलूस मैं 3.x emulators पर कुछ अतिरिक्त परीक्षण किए गए था (मैं जानता हूँ कि यह सबसे अच्छा तरीका है नहीं है, लेकिन लॉग से पहले एमु पर समान था और गैलेक्सी टैब)

  1. मैंने 1024 * 600 के लिए अपनाए गए बनावट के साथ गेम चलाया है - 80% लोडिंग संसाधनों पर ऐप क्रैश (158 मूल मेमोरी आवंटन)
  2. 800 * 480 के लिए बनावट के साथ - 100% लोडिंग (145 एमबी मूल स्मृति आवंटन) पर क्रैश क्रैश

और आखिर में मेरे पास नए Google नेक्सस टैबलेट (जेली बीन) पर ऐप चलाया गया है जो 3.x टैबलेट (1280 * 800 पीएक्स) - ~ 30 एमबी देशी मेमोरी और ~ 12 एमबी वीएम ढेर के समान बनावट का उपयोग करता है।बनावट 800 * 480 और 1280 * 800 के लिए एक ही स्मृति आवंटन ...

अंत

मैं संकल्प इस स्थिति पर लोड संसाधनों का उपयोग कर रहे हैं -

अब मैं पूरी तरह से क्या हो रहा है की समझ खो कुछ प्रगति पट्टी के साथ मांग। सभी प्रयासों के बाद मुझे कोई और रास्ता नहीं मिला है।

उत्तर

3

यदि आपको आश्चर्य है कि Android 3 2.X से अधिक क्यों क्रैश हो रहा है, तो यह बाइटबफर बग की वजह से है। बाइटबफर स्मृति का 4 गुना उपयोग करते हैं। तो अगर आप एंड्रॉयड 3 के लिए कम रेस छवियों का उपयोग करने के लिए Android में हल किया गया था है 4.

http://code.google.com/p/android/issues/detail?id=16941

Android के लिए

लकी 3+ आप बड़े ढेर विकल्प (128+ बारे में megs देता है) है, जो है जो मैं हमारे ऐप के लिए चालू करना पड़ा।

+0

आपके उत्तर के लिए धन्यवाद, मुझे आश्चर्य हुआ कि छोटे संसाधन मंच पर इतनी गंभीर बग देखें। Google ने मुझे निराश किया :(मैंने मैनिफेस्ट में बड़े हेप विकल्प का उपयोग करने का प्रयास किया था - यह 280 एमबी तक ढेर बढ़ाता है, लेकिन इसका कोई असर नहीं पड़ता है। – Viacheslav

+0

वास्तव में गंभीर बग। भाग्यशाली और एंड्रॉइड 3 बाजार हिस्सेदारी के समय हर कोई एंड्रॉइड 4 पर जा रहा है छोटा। लेकिन जैसा कि मैंने पहले कहा था कि एंड्रॉइड 3 की बात होने पर आपको अपनी छवियों को कम रिज़ॉल्यूशन करना होगा। – Zammbi

+0

एंड्रॉइड 4.0.3 – Viacheslav

1

मेरा मानना ​​है कि बिटमैप का रन-टाइम मेमोरी उपयोग बढ़ सकता है यदि बिटमैप का प्रारूप डिस्प्ले के प्रारूप से मेल नहीं खाता है (सिस्टम ब्लॉइट के लिए सही प्रारूप के साथ एक प्रतिलिपि बना देगा)। मुझे लगता है कि यह पुराने एंड्रॉइड सिस्टम पर एक समस्या है, और शायद आप 3.0 पर जो नहीं देख रहे हैं, लेकिन यह देखने लायक हो सकता है। (Romain's post here के अंत में प्रदर्शन बिट देखें)

बाइटमैप्स अंतर्निहित बिटमैप्स के लिए मेमोरी एकाउंटिंग 3.0 (हनीकॉम्ब) में बदल गया, स्मृति मूल पक्ष से जावा ढेर तक चली गई। हालांकि, यह सिर्फ स्मृति को स्थानांतरित कर दिया गया है, और वास्तविक सीमाओं को प्रभावित नहीं किया जाना चाहिए था (मूल स्मृति अभी भी एक ही सीमा के खिलाफ जिम्मेदार थी, यह कुछ उपकरणों के लिए दृश्यमान नहीं था)।

ढेर सीमा विभिन्न उपकरणों पर भी अलग है। (Android heap size on different phones/devices and OS versions देखें)

यह गूगल आई/ओ बात 3.0 में स्मृति प्रबंधन परिवर्तन है कि उपयोगी हो सकता है आसपास के मुद्दों का एक समूह को शामिल किया गया: http://dubroy.com/blog/google-io-memory-management-for-android-apps/

आप कर सकते हैं कम स्मृति उपकरणों पर अपने बिटमैप्स का load a scaled-down version। यह शायद http://developer.android.com/training/displaying-bitmaps/index.html के बाकी हिस्सों के माध्यम से पढ़ने लायक है।

आपके एप्लिकेशन पर कितने डिस्क छवि डेटा हैं? आपके द्वारा लोड किए जा रहे अन्य गैर-छवि डेटा (फोंट, एनिमेशन, आदि) कितना बड़ा है?

+0

आपके उत्तर के लिए धन्यवाद, मैंने आपके लिंक से कई रोचक और उपयोगी जानकारी की स्थापना की है। डिस्क डेटा आकार के बारे में कहना मुश्किल है, लेकिन मुझे लगता है कि 3.x टैबलेट के लिए बनावट के लिए ~ 15-20 एमबी, फोंट के लिए 0.25 एमबी और ध्वनि और संगीत के लिए 2.5 एमबी हैं। – Viacheslav

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