我反复读到,在封闭 Activity 的 onPause() 和 onResume() 方法期间,必须为 GLSurfaceview 调用 onPause() 和 onResume()。我认为这是停止并重新启动渲染线程以节省资源。但是,当我记录渲染线程的 onDraw 方法的每次迭代时,我看到当我按下主页或后退按钮时 onDraw 停止被调用,当我返回到应用程序时, onSurfaceCreated 和 onSurfaceChanged 被调用,然后 onDraw调用 resume - 即使在我删除了相应 Activity 方法中对 GLSurfaceview 的 onPause() 和 onResume() 方法的调用之后。如果渲染线程没有停止,我怎么会看到这种行为?即使不再调用 onDraw,渲染线程是否仍然存在?如果渲染线程在 Activity 失去焦点时自动关闭,那么为什么需要调用 GLSurfaceview 版本的 onPause() 和 onResume()?
最佳答案
这似乎是 GLSurfaceView
中的一个错误,它试图通过容忍您忘记调用 onResume()
和 onPause()
来变得聪明.我不确定这是不是故意的。
将调用留在外面几乎总是有效,但在某些情况下可能会导致奇怪的行为和崩溃。我不太确定这些情况是什么,但我已经追踪到一些奇怪的崩溃,可以追溯到缺少 onResume()
/onPause()
调用。当您不调用它们时,GLSurfaceView
中的状态机会有些困惑 - 看起来“自动”恢复和暂停的回退逻辑在 100% 的情况下都不会被触发。
关于android - 何时调用 GLSurfaceView 方法 onPause() 和 onResume(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14552372/