Aller au contenu

java.lang.OutOfMemorryError


Flo07

Recommended Posts

Bonjour à tous,

Actuellement en plein développement d'une petite application, je me heurte à un petit souci...

J'obtiens cette erreur : java.lang.OutOfMemorryError : bitmap size exceed VM budget

Pour vous expliquer la situation, l'application permet de visualiser une image après sélection dans une gallery, le tout dans une ImageView. En plus de ça, il faut que l'on puisse agir sur cette image avec du multi-touch et du déplacement.

Pour ce faire, j'ai utiliser des tutos trouvés sur le net. J'ai donc découvert que les ImageView ne permettent pas d'intégrer directement le multi-touch et qu'il faut passer par une "matrix". Le problème c'est que la matrix donnait le rendu de l'image dans sa taille réel et non pas redimensionnée dans l'ImageView et qu'il me faut travailler avec des images de taille HD soit : 1366*768.

Je dois donc, pour chaque images sélectionné la redimensionnée en fonction de la taille de l'écran grâce à un petit calcule.

Et c'est, à mon avis, à ce moment là que ce produit l'erreur.

Dans l'application, il y a plusieurs sous parties qui possède chacune leurs propres images. Lorsque je vais dans une des sous partie, aucun problème, mais lorsqu'on en ressort et qu'on va dans une seconde sous partie, on obtient le Force Close...

Je ne comprends donc pas pourquoi ca marche un coup, mais pas le suivant.

De plus, l'erreur ne se produit que sur les mobiles. En effet, aucune erreur dans l'émulateur mais Force Close sur Desire HD et sur Galaxy S...

Est-ce quelqu'un connait une solution ?

Peut être vidée la mémoire entre chaque Activity... Mais je ne sais pas faire non plus.

Merci par avance pour votre coup de mains !

Florian

edit : Voilà l'erreur complète :

[color="#FF0000"]02-14 17:25:06.555: ERROR/dalvikvm-heap(23205): 4720896-byte external allocation too large for this process.[/color]
02-14 17:25:06.594: ERROR/GraphicsJNI(23205): VM won't let us allocate 4720896 bytes
02-14 17:25:06.625: DEBUG/dalvikvm(2356): GC_EXPLICIT freed 52 objects / 2408 bytes in 118ms
02-14 17:25:06.649: DEBUG/dalvikvm(3321): GC_EXPLICIT freed 426 objects / 22864 bytes in 135ms
02-14 17:25:06.680: DEBUG/AndroidRuntime(23205): Shutting down VM
02-14 17:25:06.680: WARN/dalvikvm(23205): threadid=1: thread exiting with uncaught exception (group=0x4001d7d0)
02-14 17:25:06.723: DEBUG/dalvikvm(2356): GC_EXPLICIT freed 2 objects / 56 bytes in 97ms
02-14 17:25:06.743: DEBUG/dalvikvm(3321): GC_EXPLICIT freed 363 objects / 18384 bytes in 77ms
02-14 17:25:06.770: DEBUG/WeatherWidgetProvider(3321): onReceive.... 111 com.mediawoz.weather.update
02-14 17:25:06.770: DEBUG/WeatherMWidgetProvider(3321): onReceive.... 111 com.mediawoz.weather.update
02-14 17:25:06.774: DEBUG/WeatherSWidgetProvider(3321): onReceive.... 111 com.mediawoz.weather.update
02-14 17:25:06.801: INFO/global(2492): Default buffer size used in BufferedInputStream constructor. It would be better to be explicit if an 8k buffer is required.
[color="#FF0000"]02-14 17:25:06.872: ERROR/AndroidRuntime(23205): FATAL EXCEPTION: main
02-14 17:25:06.872: ERROR/AndroidRuntime(23205): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.graphics.Bitmap.nativeCreate(Native Method)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:591)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:565)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:426)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:449)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:475)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at com.ctm.presentation.client.PagesFixes.resize(PagesFixes.java:159)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at com.ctm.presentation.client.PagesFixes$1.onItemClick(PagesFixes.java:136)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.widget.AdapterView.performItemClick(AdapterView.java:284)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.widget.Gallery.onSingleTapUp(Gallery.java:864)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.view.GestureDetector.onTouchEvent(GestureDetector.java:557)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.widget.Gallery.onTouchEvent(Gallery.java:839)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.view.View.dispatchTouchEvent(View.java:3819)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1723)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1129)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1707)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.os.Looper.loop(Looper.java:123)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at java.lang.reflect.Method.invokeNative(Native Method)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at java.lang.reflect.Method.invoke(Method.java:521)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
02-14 17:25:06.872: ERROR/AndroidRuntime(23205):     at dalvik.system.NativeStart.main(Native Method)[/color]

Lien vers le commentaire
Partager sur d’autres sites

Chaque application dans Android est limité à 16Mo. Même si tu as 900Mo de libre (sur tablet par exemple).

Code executable + variables (bitmap images, etc) < 16Mo

Rien à faire de ce coté là ! Il faut adapter ton applie pour prendre çà en compte...

Tu peut t'aider en voyant la taille (et voir quand la RAM utilisé augmente) grâce au DDMS (icone heap)

De plus quand tu n'as plus besoin du Bitmap, n'oublis pas le .recycle();

le mettre à null ne suffit pas !

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...