web-dev-qa-db-fra.com

Signal fatal 11 (SIGSEGV) à 0x00000000 (code = 1), thread 32140

50% du temps lors de l'exécution de mon application, j'obtiens cette erreur

06-20 12:56:51.183: A/libc(32140): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 32140 (example.www)

Je dois juste rouvrir l'application et ça marche. Mais je ne sais pas pourquoi j'obtiens cette erreur et l'application se bloque. Je travaille avec de grandes images avec des dimensions, presque 1200x1200px et en les définissant comme arrière-plan. J'utilise également cette image comme bitmap pour d'autres activités en arrière-plan. Faire également quelques appels à un serveur et récupérer des données JSON. J'espère avoir donné suffisamment d'informations, car je ne sais pas quoi chercher ... Je développe pour 4.1.2

Logcat complet

   06-20 13:02:38.823: W/ActivityThread(4102): Application eu.sexample.www can be debugged on port 8100...
06-20 13:02:38.983: D/dalvikvm(4102): GC_FOR_ALLOC freed 114K, 7% free 12283K/13191K, paused 13ms, total 13ms
06-20 13:02:38.988: I/dalvikvm-heap(4102): Grow heap (frag case) to 18.398MB for 5954576-byte allocation
06-20 13:02:39.008: D/dalvikvm(4102): GC_CONCURRENT freed 1K, 5% free 18096K/19015K, paused 12ms+1ms, total 22ms
06-20 13:02:39.053: D/dalvikvm(4102): GC_FOR_ALLOC freed 0K, 5% free 18097K/19015K, paused 10ms, total 10ms
06-20 13:02:39.088: I/dalvikvm-heap(4102): Grow heap (frag case) to 41.112MB for 23818256-byte allocation
06-20 13:02:39.103: D/dalvikvm(4102): GC_CONCURRENT freed 0K, 3% free 41357K/42311K, paused 3ms+1ms, total 16ms
06-20 13:02:39.168: D/dalvikvm(4102): GC_FOR_ALLOC freed 5815K, 16% free 35916K/42695K, paused 10ms, total 10ms
06-20 13:02:39.193: E/Location(4102): 51.1878642, 4.3802626
06-20 13:02:39.283: D/libEGL(4102): loaded /system/lib/egl/libEGL_mali.so
06-20 13:02:39.283: D/libEGL(4102): loaded /system/lib/egl/libGLESv1_CM_mali.so
06-20 13:02:39.288: D/libEGL(4102): loaded /system/lib/egl/libGLESv2_mali.so
06-20 13:02:39.288: D/(4102): Device driver API match
06-20 13:02:39.288: D/(4102): Device driver API version: 10
06-20 13:02:39.288: D/(4102): User space API version: 10 
06-20 13:02:39.288: D/(4102): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012 
06-20 13:02:39.323: D/OpenGLRenderer(4102): Enabling debug mode 0
06-20 13:02:42.413: D/dalvikvm(4102): GC_FOR_ALLOC freed 448K, 14% free 37130K/42695K, paused 13ms, total 13ms
06-20 13:02:42.423: I/dalvikvm-heap(4102): Grow heap (frag case) to 42.664MB for 5954576-byte allocation
06-20 13:02:42.433: D/dalvikvm(4102): GC_CONCURRENT freed 4K, 12% free 42941K/48519K, paused 2ms+2ms, total 13ms
06-20 13:02:42.478: D/dalvikvm(4102): GC_FOR_ALLOC freed 0K, 12% free 42941K/48519K, paused 10ms, total 10ms
06-20 13:02:42.478: I/dalvikvm-heap(4102): Forcing collection of SoftReferences for 23818256-byte allocation
06-20 13:02:42.498: D/dalvikvm(4102): GC_BEFORE_OOM freed 9K, 12% free 42931K/48519K, paused 19ms, total 19ms
06-20 13:02:42.498: E/dalvikvm-heap(4102): Out of memory on a 23818256-byte allocation.
06-20 13:02:42.498: I/dalvikvm(4102): "main" prio=5 tid=1 RUNNABLE
06-20 13:02:42.498: I/dalvikvm(4102):   | group="main" sCount=0 dsCount=0 obj=0x41585508 self=0x415758c8
06-20 13:02:42.498: I/dalvikvm(4102):   | sysTid=4102 Nice=0 sched=0/0 cgrp=apps handle=1074532144
06-20 13:02:42.498: I/dalvikvm(4102):   | schedstat=( 2709445063 154759556 1906 ) utm=227 stm=43 core=2
06-20 13:02:42.498: I/dalvikvm(4102):   at Android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
06-20 13:02:42.498: I/dalvikvm(4102):   at Android.graphics.BitmapFactory.decodeStream(BitmapFactory.Java:623)
06-20 13:02:42.498: I/dalvikvm(4102):   at Android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.Java:476)
06-20 13:02:42.503: I/dalvikvm(4102):   at Android.graphics.drawable.Drawable.createFromResourceStream(Drawable.Java:781)
06-20 13:02:42.503: I/dalvikvm(4102):   at Android.content.res.Resources.loadDrawable(Resources.Java:1963)
06-20 13:02:42.503: I/dalvikvm(4102):   at Android.content.res.TypedArray.getDrawable(TypedArray.Java:601)
06-20 13:02:42.503: I/dalvikvm(4102):   at Android.view.View.<init>(View.Java:3436)
06-20 13:02:42.503: I/dalvikvm(4102):   at Android.view.View.<init>(View.Java:3371)
06-20 13:02:42.503: I/dalvikvm(4102):   at Android.view.ViewGroup.<init>(ViewGroup.Java:426)
06-20 13:02:42.503: I/dalvikvm(4102):   at Android.widget.RelativeLayout.<init>(RelativeLayout.Java:184)
06-20 13:02:42.503: I/dalvikvm(4102):   at Java.lang.reflect.Constructor.constructNative(Native Method)
06-20 13:02:42.503: I/dalvikvm(4102):   at Java.lang.reflect.Constructor.newInstance(Constructor.Java:417)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.view.LayoutInflater.createView(LayoutInflater.Java:587)
06-20 13:02:42.508: I/dalvikvm(4102):   at com.Android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.Java:56)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.view.LayoutInflater.onCreateView(LayoutInflater.Java:660)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:685)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.view.LayoutInflater.inflate(LayoutInflater.Java:466)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
06-20 13:02:42.508: I/dalvikvm(4102):   at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:308)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.app.Activity.setContentView(Activity.Java:1924)
06-20 13:02:42.508: I/dalvikvm(4102):   at eu.sexample.www.MainActivity.onCreate(MainActivity.Java:28)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.app.Activity.performCreate(Activity.Java:5206)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1083)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2064)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2125)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.app.ActivityThread.access$600(ActivityThread.Java:140)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1227)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.os.Handler.dispatchMessage(Handler.Java:99)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.os.Looper.loop(Looper.Java:137)
06-20 13:02:42.508: I/dalvikvm(4102):   at Android.app.ActivityThread.main(ActivityThread.Java:4898)
06-20 13:02:42.508: I/dalvikvm(4102):   at Java.lang.reflect.Method.invokeNative(Native Method)
06-20 13:02:42.508: I/dalvikvm(4102):   at Java.lang.reflect.Method.invoke(Method.Java:511)
06-20 13:02:42.513: I/dalvikvm(4102):   at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1006)
06-20 13:02:42.513: I/dalvikvm(4102):   at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:773)
06-20 13:02:42.513: I/dalvikvm(4102):   at dalvik.system.NativeStart.main(Native Method)
06-20 13:02:42.513: A/libc(4102): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 4102 (example.www)
23
mXX

La vraie erreur est Out of memory on a 23818256-byte allocation. Vous essayez d'allouer un bloc de mémoire de ~ 22 Mo, et vous n'avez pas autant de mémoire disponible, sans parler d'un bloc contigu de cette taille.

Dans ce cas, cela provient d'une ressource utilisable. ~ 22 Mo serait une image vraiment massive, plus comme 2400x2400 que 1200x1200.

La taille de votre tas de processus est de 48 Mo, ce qui est substantiel, mais ~ 22 Mo représentent presque la moitié de votre budget de tas.

Je vous recommande de découvrir de quelle ressource tirable il s'agit (on dirait qu'il pourrait s'agir d'un arrière-plan d'un RelativeLayout), puis de réduire sa taille et les tailles d'images similaires. Ici, par "taille", je veux dire le nombre total de pixels, pas la taille sur le disque, car ce qui importe, c'est la taille décompressée en RAM, pas la taille de l'image sur le disque.

En outre, cela pourrait être un problème de répertoires de ressources. Par exemple, si vous placez votre image 1 200 x 1 200 dans res/drawable/, qui est effectivement synonyme de res/drawable-mdpi/. Si cet appareil se trouve être un -xhdpi appareil, cela expliquerait l'utilisation de la mémoire, car Android essaiera de suréchantillonner cette image et de doubler chacune des dimensions.

32
CommonsWare

Dans votre AndroidManifest.

<application.... Android:hardwareAccelerated="false" />

Travaille pour moi.

3
Android Dev