Android 如何重新启动GLSURFACHEVIEW的渲染线程(或如何替代)?

Android 如何重新启动GLSURFACHEVIEW的渲染线程(或如何替代)?,android,multithreading,opengl-es,glsurfaceview,Android,Multithreading,Opengl Es,Glsurfaceview,我正在尝试做经典手机游戏范例的方法:一个级别选择器,然后是一个游戏屏幕。 我完全理解有很多方法可以做到这一点,但我想知道,当我为了学习目的而尝试这一方法时,会出现什么问题: 我有一个活动,其中包含对我自己的GLSURFACHEVIEW孩子的引用。在活动开始时,它加载默认的“级别”,并完美地播放它。我可以看到渲染线程已启动 我实现了一个OptionsMenu项,激活后它会使用合适的适配器为GridView充气,允许用户选择一个级别;并使用setContentView将此膨胀布局设置为“活动”。这是

我正在尝试做经典手机游戏范例的方法:一个级别选择器,然后是一个游戏屏幕。 我完全理解有很多方法可以做到这一点,但我想知道,当我为了学习目的而尝试这一方法时,会出现什么问题:

我有一个活动,其中包含对我自己的GLSURFACHEVIEW孩子的引用。在活动开始时,它加载默认的“级别”,并完美地播放它。我可以看到渲染线程已启动

我实现了一个OptionsMenu项,激活后它会使用合适的适配器为GridView充气,允许用户选择一个级别;并使用setContentView将此膨胀布局设置为“活动”。这是线程死亡的时候

现在,我还实现了该菜单的OnClick,以便在单击后加载游戏引擎中的一个级别,顺便说一句,并通过使用setContentView和saved in 1返回GLSurfaceView。参考资料

这就是我得到一个空白屏幕的原因。一切正常,菜单仍然工作,我可以返回到级别选择器,但在调试器中我可以看到渲染线程不存在


拜托,有人能解释一下这里到底出了什么问题吗?我完全不确定OpenGL的内在特性。

实际上,每次重新创建GLSURFACHEVIEW子对象都可以解决这个问题。但我仍然很好奇,为什么这与“暂停”活动不同?logcat试图告诉我smth,但我不确定..我创建了一个简单的示例来说明一个问题:线程似乎在OnWindowsDistached中停止。再也不会跑了,是的。我不知道为什么android开发者会做出这样的决定。GLSURFACHEVIEW会为你做很多事情。有时候,它会做你不想要的事情。它并没有做任何你不能为自己做的事情——它实际上只是围绕着SurfaceView的帮助函数和回调处理程序。如果您不介意做自己的EGL上下文和线程管理,您可以让它以任何方式工作。在API 14+上,您还可以使用TextureView,它的工作原理更像普通视图。