【问题标题】:FATAL SIGNAL 11 (Sigsegv) at 0x00000000 (code=1)?致命信号 11 (Sigsegv) 在 0x00000000 (code=1)?
【发布时间】:2012-06-02 23:59:15
【问题描述】:

为什么会出现这个问题?

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);
    }

【问题讨论】:

  • 哪一行导致错误?使用调试器单步执行并隔离有问题的行。
  • 我不知道这不是我的代码错误。当我打开我的应用程序时,首先打开视频,然后 1 秒它正在关闭并说该错误。但我的应用程序不会强制关闭仅视频关闭
  • 在这种情况下,问题一定出在视频上。如果视频格式不正确,可能会导致系统视频解码器出现此错误。您是否有机会分享视频或加载视频的 URL?
  • 我使用 vitamio 编解码器。错误来自我的尺寸?高度还是宽度?网址是:mms://50.7.241.234/kelkit
  • 您找到解决方案了吗?我特别感兴趣的原因...

标签: java android crash signals


【解决方案1】:

您看到的错误消息是由取消引用本机代码中的空指针引起的。从你的显示很难猜测可能是什么原因。

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

【讨论】:

    【解决方案2】:

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

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

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

    祝你好运

    【讨论】:

    • 我不知道这不是我的代码错误。当我打开我的应用程序时,首先打开视频,然后 1 秒它正在关闭并说该错误。但我的应用程序不会强制关闭仅视频关闭
    • 您的 VideoView 代码很可能会在本机代码中引起和问题。您确实需要完整的本机堆栈跟踪来了解为什么会发生这种情况..
    • 对不起,我无法理解,是我的代码造成的?因为我只是设置了路径。当我在 pc 上的 webbrowser 上查看它时,路径正在运行,但是当我想在我的应用程序上查看它时,出现了问题
    • “您的 VideoView 代码很可能会导致本机代码中的问题”错字:/,您尝试使用的路径是什么?
    • 这条建议“如果你在你的日志猫中关闭过滤,你会看到整个堆栈跟踪。”救了我。
    【解决方案3】:

    很可能是线程问题...我曾经也遇到过Fatal Signal 11,当时我在错误的线程上做事...

    可能是你onConfigurationChanged() 实现中的 setVideoLayout() 调用。

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

    【讨论】:

    • 你能扩展一下吗?我正在尝试在其他人的代码上调试此 SIGSEGV。不知道代码的哪一部分有问题。
    【解决方案4】:

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

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

    【讨论】:

    • 是的,我也是这么猜的。这可能是因为堆中的内存不足。我之前遇到了一个问题,并通过在清单中使用 android:largeHeap="true" 解决了它。试试看,让我们知道。
    【解决方案5】:

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

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

    并退出整个应用程序。

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

    平板电脑: 三星 Galaxy Tab 2 GT-P5100 安卓 4.0.3 内核 3.0.8

    电话: 三星 Galaxy Young DUOS(旧但固件更新) GT-S6102B 安卓 4.4.2 内核 2.6.35.7

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

    好资料here: google+ link

    【讨论】:

      【解决方案6】:

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

      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。这个东西在被破坏的监听器中停止,它也得到了同步关键字:

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

      这保证了只有在当前没有绘制任何内容时才能销毁表面。

      现在离开活动不再崩溃!

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2012-12-10
        • 1970-01-01
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        • 1970-01-01
        • 2015-11-21
        相关资源
        最近更新 更多