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

这是错误

4

6 回答 6

7

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

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

于 2012-10-18T11:24:08.420 回答
5

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

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

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

祝你好运

于 2014-03-31T08:21:14.473 回答
4

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

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

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

于 2012-10-18T11:13:54.977 回答
2

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

android:largeHeap="true"一种可能的解决方案是通过在应用程序清单中设置允许较大的堆大小来研究使用较大的堆大小,记录在开发人员网站上。.

于 2014-04-04T06:43:59.167 回答
0

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

致命信号 11 (SIGSEGV) 在 0x00000000 (code=1)

并退出整个应用程序。

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

平板电脑:三星 Galaxy Tabg 2 GT-P5100 ANDROID 4.0.3 内核 3.0.8

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

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

这里有很好的信息:google+ 链接

于 2014-12-08T14:22:57.180 回答
0

I had a similar problem when finishing my activity with two TextureViews (i.e. pressing the home button):

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

The logcat showed that the segv showed up inside a drawXXX function. So I tried to not draw when the surface is destroyed:

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

doDraw() is called regularly by a background thread. To be precise, using a ScheduledExecutorService. This thingy is stopped in the destroyed listener, which also got the synchronized keyword:

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

This guarantees that the surface can only be destroyed when currently nothing is drawn.

No more crashes on leaving the activity now!

It seems to me that nobody is using TextureViews but still SurfaceViews. Unfortunately, the latter has some problems when drawing translucent graphics on some devices, that's why I switched to TextureView.

Hope this helps.

于 2016-03-03T21:37:12.103 回答