Flo07 Posté(e) 14 février 2011 Share Posté(e) 14 février 2011 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 More sharing options...
bsegonnes Posté(e) 15 février 2011 Share Posté(e) 15 février 2011 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 More sharing options...
Flo07 Posté(e) 17 février 2011 Auteur Share Posté(e) 17 février 2011 Merci beaucoup pour ta réponse. Le problème venait bien de là. J'ai donc stocker les images sur la carte SD et il n'y a plus aucun problème ! La ram passe de presque 40M à même pas 15... Encore merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 20 février 2011 Share Posté(e) 20 février 2011 Avec BtimapFactory et BitmapFactory.Options.inJustDecodeBounds et inSampleSize tu peux redimensionner l'image a une taille plus raisonnable avant de la charger Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.