Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
暂停/快速恢复应用程序时与Android NDK中的SurfaceView崩溃_Android_Opengl Es_Android Ndk_Surfaceview - Fatal编程技术网

暂停/快速恢复应用程序时与Android NDK中的SurfaceView崩溃

暂停/快速恢复应用程序时与Android NDK中的SurfaceView崩溃,android,opengl-es,android-ndk,surfaceview,Android,Opengl Es,Android Ndk,Surfaceview,当我快速暂停/取消暂停我的应用程序时,我会遇到以下问题: E/BufferQueueProducer( 177): [SurfaceView] connect(P): already connected (cur=1 req=1) E/libEGL (25863): eglCreateWindowSurface: native_window_api_connect (win=0xb4984508) failed (0xffffffea) (already connected to anoth

当我快速暂停/取消暂停我的应用程序时,我会遇到以下问题:

E/BufferQueueProducer(  177): [SurfaceView] connect(P): already connected (cur=1 req=1)
E/libEGL  (25863): eglCreateWindowSurface: native_window_api_connect (win=0xb4984508) failed (0xffffffea) (already connected to another API?)
E/libEGL  (25863): eglCreateWindowSurface:416 error 3003 (EGL_BAD_ALLOC)
我很确定我正在正确地停止/启动渲染线程,而这个问题只有在我非常快地暂停/恢复应用程序时才会发生(比如当你按下打开的应用程序按钮时)


知道EGLCreateWindowsSurface返回EGL_NO_曲面的原因吗?我的猜测是,这可能与仍然连接到SurfaceView的某些内容有关。

听起来您正试图为已经有一个曲面的曲面创建一个EGLSurface。如果速度是个问题,通常是因为表面回调处理的滞后——表面视图表面部分由窗口管理器处理,这需要进程间通信

可能您的本机代码仍然有一个指向旧SurfaceHolder的句柄,如果您移动得更慢,该句柄将被即将出现的
surfaceCreated()
替换?如果不知道代码的具体功能,很难说。解决这类问题的一种方法是在所有感兴趣的状态更改点添加日志记录,并比较“慢速”暂停/恢复和“快速”暂停/恢复的日志


通过仔细管理SurfaceView状态,应该可以避免这些情况。对于图形,arch doc讨论了活动和SurfaceView生命周期之间的区别,以及构建应用程序以避免问题的两种方法。

您包含的文本显示了它崩溃的原因,但没有显示在哪里。你能把例外情况也包括在内吗?可能相关:它在EGLCreateWindowsSurface方法中崩溃,该方法返回EGL_NO_surface是否存在带有堆栈跟踪的本机崩溃转储?EGL和BufferQueue代码不应该在应用程序处于错误状态时使其崩溃。可能崩溃是我问题中的错误措辞:问题是没有创建EGL曲面,这随后会导致我的应用程序崩溃(这是预期的)。