Dans mon application, je télécharge des images à partir du Web. Pour cela, la première fois que je télécharge des images du web et ces images sont stockées dans la carte SD. La prochaine fois, je vérifie que ces images sont en sdcard ou non. si oui, aller chercher la carte SD sinon je télécharge sur le web. Ces images sont affichées comme liste. Je suis à plusieurs reprises (signifie déplacer vers le haut/bas en continu) en faisant défiler la liste puis mon application s'est écrasé et je reçois l'exception de mémoire insuffisante. Comment le gérer. quelqu'un peut-il m'aider?android - Problème de mémoire insuffisante
Stacktrace:
09-12 13:40:42.640: ERROR/AndroidRuntime(3426): java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap Size=7879KB, Allocated=3362KB, Bitmap Size=11402KB)
09-12 13:40:42.640: ERROR/AndroidRuntime(3426): at android.graphics.BitmapFactory.nativeDecodeFile(Native Method)
09-12 13:40:42.640: ERROR/AndroidRuntime(3426): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:355)
09-12 13:40:42.640: ERROR/AndroidRuntime(3426): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:433)
09-12 13:40:42.640: ERROR/AndroidRuntime(3426): at com.ibkr.elgifto.GiftCategories$itemlistadapter$4.getDrawableFromUrl(GiftCategories.java:830)
09-12 13:40:42.640: ERROR/AndroidRuntime(3426): at com.ibkr.elgifto.GiftCategories$itemlistadapter$4.run(GiftCategories.java:739)
09-12 13:53:32.450: INFO/WSP(332): [Receiver] next auto-sync alarm event is 180 mins later, at time: Mon Sep 12 16:53:32 GMT+05:30 2011
Code
private Drawable getDrawableFromUrl(String imageUrl) {
// TODO Auto-generated method stub
String filename = imageUrl;
filename = filename.replace("/", "+");
filename = filename.replace(":", "+");
filename = filename.replace("~", "s");
File elgiftoimagesref = new File("/sdcard/Elgiftoimages/");
elgiftoimagesref.mkdir();
final File file = new File(elgiftoimagesref, filename);
BitmapDrawable SDdrawable = null;
boolean exists = file.exists();
if (!exists) {
try {
URL myFileUrl = new URL(imageUrl);
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
final Bitmap result = BitmapFactory.decodeStream(is);
is.close();
new Thread() {
public void run() {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
if (result != null) {
result.compress(Bitmap.CompressFormat.JPEG, 40,
bytes);
}
try {
FileOutputStream fo;
fo = new FileOutputStream(file);
fo.write(bytes.toByteArray());
fo.flush();
fo.close();
// result.recycle();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
BitmapDrawable returnResult = new BitmapDrawable(result);
return returnResult;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
} else {
// Here i am getting the out of memory error.
SDdrawable = new BitmapDrawable(BitmapFactory.decodeFile(file
.toString()));
return SDdrawable;
}
}
diminuer la taille des images et essayer – Abhi
ici i suis la compression de l'image, il ne suffit pas alors comment diminuer la taille? – naresh
Vous semblez les décompresser en mémoire, puis les recomprimer en mode sauvegarde ... peut-être ignorer cela et enregistrer le flux tel quel. – Torp