से अधिक है तो मुझे अपने ListView
के लिए आलसी छवि लोडर मिला है। मैं बेहतर मेमोरी प्रबंधन के लिए this tutorial का भी उपयोग करता हूं और बिटमैप छवियों को ArrayList
में संग्रहीत करता हूं।java.lang.OutOfMemoryError: बिटमैप आकार वीएम बजट
मेरा ListView
काम करता है डीबी से 8 छवियों को लोड करता है तो एक बार जब उपयोगकर्ता नीचे तक स्क्रॉल करता है तो यह एक और 8 आदि लोड करता है। 35 छवियों या उससे कम होने पर कोई समस्या नहीं थी, लेकिन कोई और मेरा ऐप बल OutOfMemoryError
के साथ बंद हो जाता है।
बात यह है कि मैं नहीं समझ सकता मैं एक कोशिश पकड़ अंदर मेरे कोड है है:
try
{
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(image, 0, image.length, o);
//Find the correct scale value. It should be the power of 2.
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while(true)
{
if(width_tmp/2 < imageWidth || height_tmp/2 < imageHeight)
{
break;
}
width_tmp/=2;
height_tmp/=2;
scale++;
}
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
bitmapImage = BitmapFactory.decodeByteArray(image, 0, image.length, o2);
}
catch (Exception e)
{
e.printStackTrace();
}
लेकिन कोशिश कैच ब्लॉक OutOfMemory
अपवाद को पकड़ने नहीं है और से मैं SoftReference
बिटमैप छवियों क्या समझ जब OutOfMemory
अपवाद को फेंक दिया जा रहा है, तो एप्लिकेशन को स्मृति से बाहर चलने पर साफ़ किया जाना चाहिए।
मैं यहाँ क्या गलत कर रहा हूं?
आह मेरे बुरे ... बिल्कुल नहीं पता था। क्या ऐसा कुछ भी है जो मैं इसे रोकने से रोकने के लिए कर सकता हूं? मैं पूरी तरह से अटक गया हूँ। – mlevit
आउटऑफमेमरी एरर को पकड़ने के लिए यह पूरी तरह से अच्छी समझ में आता है, अगर किसी को समस्या का समाधान करने का कोई तरीका है, या यदि कोई व्यक्ति अलग-अलग प्रक्रियाओं में एक नई गतिविधि शुरू करने के लिए उपयोगकर्ता को बताना चाहता है। – arberg