मेरे पास एक लंबवत रैखिक Layout में दृश्यों की एक श्रृंखला है। प्रत्येक दृश्य को स्क्रॉल करते समय बिटमैप उत्पन्न करता है और खींचता है। प्रदर्शन कारणों से, मैं प्रत्येक बार ड्रॉ() को बिटमैप उत्पन्न नहीं करता हूं, लेकिन स्मृति कारणों से मैं बिटमैप्स के लिए कठिन संदर्भ नहीं रख सकता। मैं उस रणनीति पर सलाह का उपयोग कर सकता हूं जिसे मुझे लेना चाहिए।एंड्रॉइड: बिटमैप्स, सॉफ्ट रेफरेंस, और ओओएम?
मैंने पहले से ही स्पष्ट मार्ग की कोशिश की है: बिटमैप उत्पन्न करना, और उसके बाद इसे सॉफ्ट रेफरेंस के साथ लपेटना। यह दो कारणों से विफल रहा। 1. संदर्भ अपेक्षा से अधिक उत्सुकता से इकट्ठा हो जाते हैं। 2. मुझे अभी भी ओओएम मिल गया है! जो चौंकाने वाला है, क्योंकि कोई बिटमैप विशेष रूप से बड़ा नहीं है, इसलिए एक दृश्य को ओओएम का कारण नहीं बनना चाहिए, जिससे मुझे लगता है कि ओओएम होता है क्योंकि अपमानजनक सॉफ्ट रेफरेंस को मुक्त होने का मौका नहीं दिया गया था। इसके अलावा, ओओएम तब होता है जब मेरे आवेदन में 6 एमबी (डीडीएमएस व्यू के अनुसार) आवंटित ढेर आकार होता है, मैं उम्मीद करता हूं कि यह ओओएम फेंकने से पहले 16 एमबी तक बढ़ेगा।
कोई सलाह?
reg। "6 एमबी का आवंटित ढेर आकार है (डीडीएमएस दृश्य के अनुसार)": मेरा जवाब पढ़ें: http://stackoverflow.com/questions/3238388/android-out-of-memory-exception-in-gallery ... 6 एमबी बिटमैप्स द्वारा आवंटित आवंटित आकार नहीं है। बिटमैप्स देशी ढेर लेते हैं। –
धन्यवाद, मैंने आपकी पोस्ट में अनुशंसित लॉगिंग रणनीति की कोशिश की। यह बताता है कि यह "6 एमबी" पर ओओएम क्यों है। आपके लॉगिंग कोड के मुताबिक, ओओएम जब मेरा मूल उपयोग 12 एमबी तक पहुंच जाता है (और मेरा आवेदन उपयोग करीब 4 एमबी है)। जो समझ में आता है, क्योंकि यह 16 एमबी उपयोग है। हालांकि, अगर मेरे बिटमैप्स सॉफ़्ट रेफरेंस में हैं, तो 12 एमबी तक पहुंचने पर उन्हें एकत्र नहीं किया जाना चाहिए ??? – ab11
सॉफ्ट रेफरेंस के पास स्मृति उपयोग के साथ कुछ लेना देना नहीं है। – Falmarri