अब तक मैं एंड्रॉइड में छवियों के लिए SoftReference कैश का उपयोग कर रहा हूं। इस कैश का उपयोग उन छवियों के लिए किया जाता है जो ListViews में दिखाए जाते हैं और यदि स्मृति में पर्याप्त स्मृति शेष है, तो स्क्रीन पर दिखाए गए स्मृति में आइटम्स की छवियों को रखने में मदद करनी चाहिए।एंड्रॉइड में मेमोरी छवि कैश में कैसे कार्यान्वित करें?
इस समस्या में यह है कि सॉफ़्ट रेफरेंस कचरे को लगभग उसी पल में इकट्ठा किया जाता है जब अंतिम हार्ड संदर्भ जारी किया जाता है। इसका नतीजा यह है कि स्क्रीन से हटाई गई एक छवि उस पल में कचरा एकत्र की जाती है और यदि उपयोगकर्ता सूची दृश्य में इस प्रविष्टि पर वापस स्क्रॉल करता है तो छवि को आंतरिक फोन मेमोरी से पुनः लोड किया जाता है जिसके परिणामस्वरूप जटिल आलसी लोडिंग प्रक्रिया होती है, जिसके परिणामस्वरूप सूची और सामान्य खराब प्रदर्शन के लगातार redraws में।
नरम संदर्भ व्यवहार के लिए bug request बताता है कि यह एकमात्र व्यवहार है और आपको इस तरह की सामग्री को कैश करने के लिए LRU-Cache का उपयोग करना चाहिए।
मेरे प्रश्न के बारे में जानें। एलआरयू कैश केवल उतनी मेमोरी लेगा जितना मैं उसे अनुमति देता हूं। लेकिन अगर ऐप को बहुत मेमोरी चाहिए तो यह स्मृति मुक्त नहीं होगा। मुझे कैश का उपयोग करने की अनुमति कैसे देनी चाहिए, और कैश के आकार को कम करने का कोई तरीका है यदि फोन की मेमोरी स्थिति तंग हो जाती है?
फिलहाल छवि कैश को सभी गतिविधियों के लिए वैश्विक छवि भंडारण के रूप में एप्लिकेशन के अंदर सहेजा जाता है। इसके परिणामस्वरूप मेरा ऐप लगातार छवि कैश की सभी मेमोरी का उपयोग करेगा, भले ही मेरी गतिविधियां पृष्ठभूमि में हों या नष्ट हो जाएं।
उत्तर – Janusz
के उत्तर के लिए धन्यवाद, मैं नहीं देख सकता कि LruCache का उपयोग करने से कैशिंग छवियों या किसी अन्य बीएलओबी की समस्या को ठीक किया जाएगा। समस्या इसका निश्चित आकार है, जिसमें से प्रत्येक प्रविष्टि कैश्ड ऑब्जेक्ट का एक मजबूत संदर्भ रखती है। यह डिवाइस की स्मृति के साथ स्केल नहीं करेगा। – Matthias
LruCache प्रविष्टियों को सूचित करता है जब इसका आकार आपके द्वारा निर्धारित सीमा से अधिक हो जाता है। आप LruCache प्रत्येक प्रविष्टि के आकार को मापने में मदद करने के लिए एक विधि को ओवरराइड कर सकते हैं। –