致命信号11(SIGSEGV)在0x00000000处(code=1),线程32140。

24

运行我的应用程序时,有50%的几率出现此错误。

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

我只需要重新打开应用程序,然后它就能正常工作。但我不知道为什么会出现这个错误,导致应用程序崩溃。 我正在使用尺寸几乎为1200x1200像素的大图像作为背景,并将其设置为背景。我还将该图像用作其他活动的位图背景。同时还通过调用服务器并获取JSON数据进行一些操作。 希望我提供的信息足够,因为我不知道要查找什么... 我正在为4.1.2开发

完整的Logcat日志

   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)

你的应用程序中使用过多线程吗? - 7bluephoenix
你能在这里发布完整的LogCat吗? - Vishesh Chandra
添加完整的logcat。你所说的多线程,是指异步任务吗?那么是的,我正在使用asyncTasks来进行网络操作。 - mXX
3个回答

34
真正的错误是“23818256字节分配内存不足”。您正在尝试分配约22MB的内存块,而您没有那么多可用的自由内存,更别说一个如此大的连续块了。在这种情况下,这来自于可绘制资源。 ~22MB将是真正的巨大图像,更像2400x2400而不是1200x1200。您的进程堆大小为48MB,这是相当大的,但~22MB几乎占了您堆预算的一半。我建议您找出这是哪个drawable资源(看起来可能是RelativeLayout的背景),然后减小其大小和类似图像的大小。在这里,“大小”指的是总像素数,而不是磁盘上的大小,因为重要的是RAM中的解压缩大小,而不是图像在磁盘上的大小。另外,这可能是资源目录的问题。例如,如果您将1200x1200图像放在res / drawable /中,则实际上等同于res / drawable-mdpi /。如果此设备恰好是-xhdpi设备,则会解释内存使用情况,因为Android将尝试放大此图像并使每个维度加倍。

@mXX:那个应该是先加载的。如果你不想在加载时缩放图像,而是在渲染时缩放(用RAM换CPU/GPU),尝试将资源移动到res/drawable-nodpi/。我不使用像这样的大型图像背景,但我认为这会有所帮助。话虽如此,即使它们在加载时没有缩放到2400x2400,你也无法拥有超过几个1200x1200可绘制资源。 - CommonsWare
如果我不想让它缩放,我基本上只需要将其放入xhdpi文件夹中,对于mdpi和hdpi也提供一个drawable即可。 - mXX
非常感谢!这让我疯狂了... 我把我的图片放在 res/drawable/xhdpi 中,一切都很好!再次感谢! - aveschini
非常感谢!原来是背景的问题!! - Hamzeh Soboh
@CommonsWare 能否帮忙解决类似问题 https://dev59.com/p4Lba4cB1Zd3GeqPkuXe - Neji
显示剩余5条评论

3
在你的AndroidMenifest中,<application.... android:hardwareAccelerated="false" />可以起作用。

1
这对我也起作用了。为了禁用WebView的硬件加速(这是我必须做的,以避免崩溃),只需执行webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);即可。 - Grux

0

在XML布局中将FrameLayout替换为LinearLayout


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接