2011-08-15 10 views
23

एंड्रॉइड की BitmapFactory.Options.inPurgeable को various places में एंड्रॉइड 2.x और पहले (एंड्रॉइड 3.1 fixes this) में आउटऑफमेमरी अपवादों से बचने के तरीके के रूप में अनुशंसा की गई है।मैं कभी भी बिटमैप फैक्ट्री के इनपर्ज करने योग्य विकल्प का उपयोग क्यों नहीं करूंगा?

यदि inPurgeable इतना अच्छा है, तो मैं कभी इसका उपयोग क्यों नहीं करना चाहूंगा? documentation क्या इस विकल्प क्या कर रहा है के बारे में विवरण पर बहुत हल्का लगता है:

यह सच है, तो जिसके परिणामस्वरूप बिटमैप इसकी पिक्सल ऐसे आवंटित करेगा कि वे सिस्टम स्मृति को पुनः प्राप्त करने की जरूरत है पर्ज किया जा सकता है सेट है, तो। उस उदाहरण में, जब पिक्सल को फिर से एक्सेस करने की आवश्यकता होती है (उदा। बिटमैप खींचा जाता है, getPixels() को कॉल किया जाता है), वे स्वचालित रूप से फिर से डीकोड किए जाएंगे

शानदार लगता है। क्या चालबाजी है?

उत्तर

9

documentation को बाद में अतिरिक्त जानकारी के साथ अपडेट किया गया है जो आपके मूल प्रश्न को संबोधित करता है।

सारांश: इस ध्वज का उपयोग अब अनुशंसित नहीं है।

+1

वास्तव में, इस झंडा के बाद से (एपीआई 21 के रूप में) बहिष्कृत किया गया है। –

1

पुन: डीकोड होने के लिए, बिटमैप को इनपुट के संदर्भ को साझा करके या इसकी एक प्रति बनाकर, एन्कोड किए गए डेटा तक पहुंच होनी चाहिए।

यदि आपके पास अब एन्कोड किए गए डेटा तक पहुंच नहीं है, तो यह एक समस्या हो सकती है? क्या होगा यदि आप स्ट्रीमिंग बाइटएरे से लाइव डिकोडिंग बिटमैप्स थे और आपका एप्लिकेशन बस स्मृति को पुनः प्राप्त करने का निर्णय लेता है, तो क्या इससे आपके बिटमैप को उन पिक्सेल को खोने का कारण नहीं होगा?

1

यह ध्वज वर्तमान में पूरी तरह से अनदेखा किया गया है, यह पकड़ है।


अद्यतन @slodge द्वारा: कृपया कोई भी इस पढ़ रहे हैं और सही जवाब के रूप में देख रहा है भी टिप्पणी पढ़ने - 'यह झंडा वर्तमान में पूरी तरह से नजरअंदाज कर दिया है' कुछ मामलों में ही सच है - अन्य मामलों में (जैसे डाउनलोड किए गए डेटा पर decodeByteArray का उपयोग करते समय) तो इस ध्वज को अनदेखा नहीं किया जाता है और बहुत उपयोगी है

+0

lol, मैंने अपनी टिप्पणी को देखने के लिए "मेरे चित्र को बेहतर तरीके से व्यवहार करने के लिए प्रतीत होता है" यह कहने के लिए मेरे प्रश्न को संपादित करने के लिए अभी लॉग इन किया है, जब मैंने आपकी टिप्पणी देखी थी। – emmby

+0

मैंने एपीडीमो की "पर्जेबल बिटमैप" गतिविधि चलाई है और ऐसा लगता है कि यह गैर-पर्जनीय के साथ 128 या 122 (डिवाइस के आधार पर) पर लगातार स्मृति से बाहर निकलता है, लेकिन Purgeable लगातार 200 पर है। इससे पता चलता है कि झंडा पूरी तरह से अनदेखा नहीं है। क्या आप इस पर विस्तार कर सकते हैं? धन्यवाद –

+0

रोमैन, "वर्तमान में", क्या आपका मतलब हनीकॉम + है? क्योंकि "बाहरी" स्मृति समस्या हल हो गई है? –

4

यदि आप फाइल सिस्टम से अपने बिटमैप पढ़ रहे हैं, तो इस ध्वज विइल फोर्स एंड्रॉइड का उपयोग करके फ़ाइल को खोलने के लिए एंड्रॉइड (कम से कम 4.0 में। 4) इसे फिर से पढ़ने में सक्षम होने के लिए। 1024 से अधिक फ़ाइलों को पढ़ने के बाद, आप खुले फाइलों की सीमा तक पहुंच जाएंगे और "बहुत सारी खुली फाइलें" त्रुटि प्राप्त करेंगे।

आप रूट टर्मिनल से lsof कमांड का उपयोग करके और सभी खुली फ़ाइलों की समीक्षा करके व्यवहारकर्ता का निरीक्षण कर सकते हैं।

+0

"फाइल सिस्टम से" का क्या अर्थ है? क्या आपका मतलब कैमरे द्वारा चित्रों, या गैलरी से चयनित छवियों को भी लिया गया था? –

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