मैं एंड्रॉइड ऐप में अपने कैशिंग की पहली परत को लागू करने के बारे में सोच रहा हूं। मैं निश्चित रूप से ओओएम अपवादों से बचने के लिए सॉफ्ट रेफरेंस पर विचार कर रहा था, लेकिन चूंकि एंड्रॉइड इन्हें "बहुत जल्द" कैसे मुक्त करता है, इस बारे में कई लेख हैं, मैंने एंड्रॉइड.यूटिल.ल्राच कैश को देखने का फैसला किया।डिवाइस क्षमताओं और मुफ्त मेमोरी के अनुसार एलआरयू कैश का आकार
प्रश्न: मैं वास्तविक डिवाइस के लिए इसे सही तरीके से कैसे आकार दूं? यह सब बहुत अच्छा लगता है कि एक एलआरयू कैश असली समाधान है और सॉफ़्ट रेफरेंस नहीं है, लेकिन यदि आप ओओएम अपवादों से बचने के लिए वास्तव में उत्सुक हैं, तो यह मुश्किल संदर्भों के किसी भी मेगाबाइट के साथ जाने के लिए बेहद असुरक्षित महसूस करता है। अगर आप मुझसे पूछें तो यह सिर्फ असुरक्षित है। वैसे भी, यह एकमात्र विकल्प प्रतीत होता है। मैं वास्तविक डिवाइस पर ऐप के ढेर आकार को खोजने के लिए getMemoryClass में देख रहा था (+ कैश को आकार देने से पहले मुक्त ढेर आकार की जांच करना)। आधार रेखा 16 मेग्स है जो ठीक लगता है, लेकिन मैंने ओओएम अपवादों को लगभग 5 मेगाबाइट्स ढेर आकार (ग्रहण MAT के अनुसार) फेंकने वाले उपकरणों (जी 1 पुराने उदाहरणों में उदाहरण के लिए) देखा है। मुझे पता है कि जी 1 बहुत पुराना है, लेकिन मुद्दा यह है कि मेरे अनुभव वास्तव में दस्तावेज के 16 मेग्स बेसलाइन के साथ संरेखित नहीं होते हैं। इसलिए मैं पूरी तरह से अनिश्चित हूं कि मुझे एलआरयू कैश को कैसे बढ़ाया जाना चाहिए यदि मुझे सबसे ज्यादा आवश्यकता हो तो मैं उचित रूप से प्राप्त कर सकता हूं। (8 मेग्स से खुश होगा और कम-स्पीक डिवाइस पर 1 मेग के रूप में छोटा होगा)
किसी भी संकेत के लिए धन्यवाद।
संपादित करें: एंड्रॉयड LRU कैश वर्ग मैं की बात कर रहा हूँ: अपने प्रश्न से http://developer.android.com/reference/android/util/LruCache.html
हाँ, मैं मेमोरी क्लास का एक समान तरीके से उपयोग कर समाप्त हुआ। मुझे अभी भी अनुमान लगाया गया है, लेकिन मैं एक और सटीक विधि में नहीं आया था। – user289463
सुनिश्चित करें कि आकार ओफ बाइट्स में आकार भी देता है। उपरोक्त लिंक में उन्होंने bitmap.getByteCount()/1024 (किलो बाइट्स में! यह निश्चित रूप से काम करता है लेकिन फिर आपका कैश आकार 1024 * memClass/8 होना चाहिए) – DominicM