有没有办法知道android.opengl.GLSurfaceView
类实例何时要破坏它的OpenGL上下文,以便我可以以受控方式删除我的OpenGL资源(着色器,纹理等)?我尝试在函数GLSurfaceView.EGLContextFactory.destroyContext()
或GLSurfaceView.EGLWindowSurfaceFactory.destroySurface()
中的第一行代码中删除它们,但这两者似乎都没有用,因为我在logcat中都收到了这个警告:
I/com.mydomain.myapp: WindowSurfaceFactory.destroySurface begins
E/libEGL: call to OpenGL ES API with no current context (logged once per thread)
I/com.mydomain.myapp: WindowSurfaceFactory.destroySurface ends
因此,删除OpenGL资源似乎已经太晚了,因为上下文似乎已经被破坏了。
我无法使用Activity.onStop()
,因为它是从错误的线程调用的。
我想我也可以忘记OpenGL资源,只需在应用程序恢复时重新创建它们,但我必须更改我的代码,因为我已经使用了很多包装类(在C ++中)围绕OpenGL资源,在构造函数中创建资源并在析构函数中销毁它,因此没有快速的方法告诉他们忘记资源。如果我忘记这些资源,我能相信它不会导致内存泄漏吗?