FATAL SIGNAL 11(Sigsegv)在0x00000000(代码= 1)?

时间:2012-05-28 16:21:39

标签: java android crash signals

为什么会出现此问题?

public static String path;
private VideoView mVideoView;


mVideoView = (VideoView) findViewById(R.id.surface_view);
mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();

//...

    private int mLayout = VideoView.VIDEO_LAYOUT_ZOOM;

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        if (mVideoView != null)
            mVideoView.setVideoLayout(mLayout, 0);
        super.onConfigurationChanged(newConfig);
    }

this is error

6 个答案:

答案 0 :(得分:7)

您看到的错误消息是由在本机代码中取消引用空指针引起的。根据你的表现,很难猜出可能是什么原因。

在你的位置,我会仔细检查你是否没有传递对系统或库方法的空引用。

答案 1 :(得分:5)

正如Nicola所提到的,这很可能是由在本机代码中取消引用空指针引起的。我遇到了类似的问题,并通过调试堆栈跟踪来解决它。

如果关闭日志cat中的过滤,您将看到整个堆栈跟踪。这将为您提供发生崩溃的详细信息,我使用以下python脚本来查找确切原因; https://code.google.com/p/android-ndk-stacktrace-analyzer/wiki/Usage

在我的情况下,由于运行自定义的android构建而发生了空指针。

祝你好运

答案 2 :(得分:4)

很可能是一个线程问题......当我在错误的线程上做事时,我曾经在Fatal Signal 11中运行过......

可能是setVideoLayout() - 调用onConfigurationChanged()实现。

如果您可以发布更多代码,那将会很有帮助......

答案 3 :(得分:2)

您可以从上一次垃圾收集调用中看到垃圾收集器未能释放任何内存并且您没有可用内存。你的缓冲区有多大?他们需要多少额外的头部空间?

一种可能的解决方案是通过设置android:largeHeap="true"来调查使用更大的堆大小,以允许应用程序清单中的大堆大小,记录在developers site.上。

答案 4 :(得分:0)

我使用三星galaxy tab 2加载任何WiX网站时遇到了同样的问题:

致命信号11(SIGSEGV)位于0x00000000(代码= 1)

退出整个申请表。

研究更多,我发现了一篇关于ROM BUG的帖子。所以,我插上手机和F11(eclipse)来编译相同的代码。而且......它正在发挥作用! 我的平板电脑仍然出现错误。

片剂: 三星Galaxy Tabg 2 GT-P5100 ANDROID 4.0.3 KERNEL 3.0.8

PHONE: 三星Galaxy Young DUOS(旧但固件更新) GT-S6102B ANDROID 4.4.2 KERNEL 2.6.35.7

在我的手机中工作,但在我加载任何使用WiX工具制作的网站时,平板电脑崩溃了。

良好的信息here: google+ link

答案 5 :(得分:0)

使用两个TextureView(即按下主页按钮)完成活动时,我遇到了类似的问题:

Fatal signal 11 (SIGSEGV), code 1, fault addr 0xa4680000 in tid 29013 (pool-4-thread-1)

logcat显示segv出现在drawXXX函数中。 因此,当表面被破坏时,我试图不画画:

private synchronized void doDraw(Canvas canvas) {
...
}

doDraw()由后台线程定期调用。确切地说,使用ScheduledExecutorService。这个东西在被破坏的侦听器中停止,它也获得了synchronized关键字:

public synchronized boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
    executorService.shutdownNow();
    return true;
}

这可以保证只有当前没有绘制任何东西时才能销毁曲面。

现在离开活动不再有崩溃!

在我看来,没有人使用TextureViews但仍然使用SurfaceViews。不幸的是,后者在某些设备上绘制半透明图形时会出现一些问题,这就是我切换到TextureView的原因。

希望这有帮助。