5

डिज़ाइन द्वारा, एंड्रॉइड ऐप्स उपयोग की जा सकने वाली ढेर मेमोरी की मात्रा में बहुत सीमित हैं। एसडीके ऐप्स के लिए सीमा पुराने उपकरणों पर 16 एमबी जितनी कम है। यह डिज़ाइन पसंद आमतौर पर समझ में आता है क्योंकि ओएस उन उपकरणों पर बहु-कार्य करने का प्रयास करता है जो आमतौर पर स्मृति पर बहुत कम होते हैं - इसलिए प्रत्येक कार्य को अपना छोटा राशन मिलता है।एंड्रॉइड पर एनडीके का उपयोग करके बिटमैप्स के लिए अप्रतिबंधित ढेर मेमोरी के लिए लाइब्रेरी

स्मृति सीमा प्रति डिवाइस भिन्न होती है। स्टॉक पर सैमसंग गैलेक्सी एस 2 उदाहरण के लिए, प्रत्येक ऐप 32 एमबी -64 एमबी के बीच कहीं मिलता है। इस डिवाइस में 1 जीबी रैम है, इसलिए एक ही कार्य डिवाइस की पेशकश के बारे में केवल 5% का उपयोग कर सकता है।

यह उल्लेख करना महत्वपूर्ण है कि आईओएस पर मेमोरी रणनीति बहुत अलग है। मेरे सबसे अच्छे ज्ञान के लिए, कोई बाहरी रूप से लागू सीमा नहीं है कि आईओएस ऐप कितनी मेमोरी का उपयोग कर सकता है। जब तक सिस्टम स्मृति से बाहर नहीं हो जाता तब तक आप जितना चाहें उतना आवंटित कर सकते हैं। यदि आप बहुत लालची हैं, तो अन्य पृष्ठभूमि ऐप्स समाप्त हो जाएंगे।

चलो इसे रास्ते से बाहर निकालें - यह कोई चर्चा नहीं है कि कौन सी मेमोरी रणनीति बेहतर है।

एंड्रॉइड पर स्मृति सीमा कुछ ऐप्स के प्रकारों के लिए निगलना मुश्किल है। ग्राफिक-गहन ऐप्स (जैसे गेम) को बिटमैप्स रखने के लिए बहुत सारी मेमोरी चाहिए। यहां तक ​​कि एक वेब ब्राउज़र भी डिफ़ॉल्ट सीमा के तहत लागू करने के लिए बहुत मुश्किल होना चाहिए।

जब resource optimization पर्याप्त नहीं है, तो स्मृति सीमा पर काबू पाने के लिए मानक रणनीति NDK का उपयोग कर रही है। एंड्रॉइड में "मूल" ढेर में कृत्रिम सीमाएं नहीं हैं और आईओएस पर ढेर की तरह व्यवहार करती हैं। बिटमैप्स को पकड़ने के लिए "मूल" ढेर का उपयोग करना अच्छी तरह से काम करता है - यह वास्तव में बिटमैप एंड्रॉइड 2.3.3 और निम्न पर रखा गया था (JVM अभी भी कृत्रिम रूप से सीमित है)।

मैं "मूल" ढेर में असीमित बिटमैप्स रखने के लिए एक एनडीके + जेएनआई लाइब्रेरी की तलाश में हूं। इसका जावा इंटरफ़ेस स्टॉक बिटमैप एपीआई के समान होना चाहिए। मैं इस उद्देश्य के लिए किसी भी सार्वजनिक परियोजना से अवगत नहीं हूं और एक खोजने के लिए आपकी मदद की सराहना करता हूं। यदि आपने पहले इसे लागू किया है और अपना कोड साझा करने के इच्छुक हैं, तो इसकी भी सराहना की जाएगी।

अंतिम टिप्पणी: कृपया इस तरह की लाइब्रेरी को आम जनता के लिए उपलब्ध होने की नैतिकता के बारे में कोई चर्चा न करें।

+0

इसका जावा इंटरफ़ेस स्टॉक बिटमैप एपीआई के समान कैसे हो सकता है? –

+0

यह पाठ्यक्रम के अपने नए पैकेज में होगा, लेकिन बिटमैप और बिटमैप फैक्ट्री के समान वर्गों की पेशकश करेगा, जिनमें मूल के समान ही तरीके हैं। आसान संक्रमण के लिए इंटरफ़ेस को समान बनाने के लिए – talkol

उत्तर

3

हाल के 2 जीबी उपकरणों पर ढेर सीमा लगभग 1 9 2 एमबी है। जिन ऐप्स को छवि संपादकों की बड़ी मात्रा की आवश्यकता होती है, उनमें ऐप मेनिफेस्ट में android:largeHeap=true शामिल हो सकता है ताकि उच्च सीमा (वर्तमान में लगभग 512 एमबी) तक बढ़ सकें।

सीमाओं के आसपास काम करना आम तौर पर एक बुरा विचार है। यह प्रत्येक डिवाइस पर भौतिक मेमोरी, डिस्प्ले साइज की मात्रा और डिवाइस के प्रदर्शन के दौरान डिवाइस के प्रदर्शन के दौरान डिवाइस पर कैलिब्रेटेड होता है। याद रखें कि, एंड्रॉइड पर, आपका ऐप एकमात्र चीज मौजूद नहीं है, और सभी भौतिक स्मृति विशेष रूप से ऐप्स के लिए आरक्षित नहीं है (एक बड़ा टुकड़ा कर्नेल में जाता है, ग्राफिक्स और वीडियो सामग्री के कई फ्रेम के लिए बफर, और इसी तरह) ।

आपका ऐप जितना बड़ा होगा, उतना अधिक संभावना है कि इसे मारना होगा। कर्नेल अग्रभूमि ऐप को मारने के लिए बहुत मेहनत करता है, जिसका अर्थ है कि आप पृष्ठभूमि प्रक्रियाओं को निचोड़ने शुरू कर रहे हैं - या उन्हें इतना पेजिंग करने और फिर से शुरू करने का कारण बनता है कि यह आपके गेम के प्रदर्शन को प्रभावित करना शुरू कर देता है।

यह सब कहकर, मुझे लगता है कि आप this की तलाश में हैं।

+0

मुझे आपके द्वारा प्रदान किए गए लिंक से प्यार था! यह एक नया सवाल है + उत्तर 10 दिन पहले पोस्ट किया गया। यह वही नहीं है जो मैं खोज रहा था, क्योंकि यह मुख्य रूप से बिटमैप्स को सहेजने और पुनर्स्थापित करने के लिए है (मैं अपनी बिटमैप्स को मूल स्मृति से सीधे खींचना चाहता हूं)। लेकिन जेएनआई कोड का उपयोग उस आधार के रूप में किया जा सकता है जो मैं करने की कोशिश कर रहा हूं। धन्यवाद! – talkol

+0

आपके उत्तर के पहले भाग के बारे में, अधिकांश मेमोरी समस्या वास्तव में पुराने उपकरणों (एंड्रॉइड 2.x के साथ) पर होती है .. इन उपकरणों की सीमाएं 16 एमबी -32 एमबी के करीब हैं और यह मुख्य स्थान है जहां मैं लाइब्रेरी का उपयोग करने की योजना बना रहा हूं। एंड्रॉइड: इन उपकरणों के लिए bigHeap भी बहुत नया है .. और अगर मेरे पास 100 एमबी ढेर था तो मुझे कोई समस्या नहीं होगी :) – talkol

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