何时调用GLSurfaceView方法onPause()和onResume()

时间:2013-01-27 21:13:00

标签: android opengl-es onresume glsurfaceview onpause

我反复阅读过,在封闭活动的onPause()和onResume()方法中,必须为GLSurfaceview调用onPause()和onResume()。我认为这是为了停止并重新启动渲染线程以节省资源。但是,当我记录渲染线程的onDraw方法的每次迭代时,我看到onDraw在我按下home或back按钮时停止被调用,当我返回应用程序时,onSurfaceCreated和onSurfaceChanged被调用,然后onDraw调用resume - 即使我在相应的activity方法中删除了对GLSurfaceview的onPause()和onResume()方法的调用。如果渲染线程没有被停止,我怎么看到这种行为?即使onDraw不再被调用,渲染线程仍然以某种方式存活吗?如果在活动失去焦点时自动关闭渲染线程,那么为什么需要调用onPause()和onResume()的GLSurfaceview版本?

1 个答案:

答案 0 :(得分:1)

这似乎是GLSurfaceView中的一个错误,它试图通过容忍您忘记拨打onResume()onPause()而变得聪明。我不确定这是否是故意的。

离开呼叫的工作几乎总是如此,但在某些情况下会导致奇怪的行为和崩溃。我不确定那些情况是什么,但我已经追溯到一些奇怪的崩溃,回到了onResume() / onPause()个调用。当你不调用它们时,GLSurfaceView中的状态机会稍微混乱 - 看起来像'自动'恢复的后备逻辑并且在100%的情况下不会触发暂停。