GLSurfaceView生命周期方法onPause()和onResume()

时间:2012-07-23 12:47:52

标签: android opengl-es glsurfaceview

我正在尝试在我的应用程序中正确使用OpenGL,并在使用生命周期方法时遇到一些问题:onPause()onResume()

documentation州:

  

活动生命周期

     

当活动暂停并恢复时,必须通知GLSurfaceView。 GLSurfaceView客户端需要在活动暂停时调用onPause(),并在活动恢复时调用onResume()。这些调用允许GLSurfaceView暂停和恢复渲染线程,并允许GLSurfaceView释放并重新创建OpenGL显示。

首先,我有点困惑,因为onPause()onResume()在整个Android的其余部分中都是由系统调用的生命周期事件(活动/片段)。在这里,根据描述(包括onPause()onResume()中的详细说明),似乎必须由开发人员手动调用它们。

我一直在使用GLSurfaceView 而不是调用onPause()onResume()并且没有注意到问题。但是,为了玩游戏(并且在恢复活动时可能会出现奇怪行为的可能性)我正在尝试按照文档中的描述添加它们。

然而,似乎使用onResume()会导致NullPointerException被抛出:

07-23 13:20:08.570: E/AndroidRuntime(20777): Caused by: java.lang.NullPointerException
07-23 13:20:08.570: E/AndroidRuntime(20777):    at android.opengl.GLSurfaceView.onResume(GLSurfaceView.java:544)
07-23 13:20:08.570: E/AndroidRuntime(20777):    at com.ActivityNameHere.onResume(ActivityNameHere.java:151)

我是否缺少向Activity注册View的步骤?

1 个答案:

答案 0 :(得分:4)

onPause()onResume()仍在破坏我的实施 - 但为了公平起见,他们不会再崩溃了:

Documentation:

The following GLSurfaceView methods can only be called after setRenderer is called:

getRenderMode()
onPause()
onResume()
queueEvent(Runnable)
requestRender()
setRenderMode(int)

在某些情况下,我setRenderer()之前调用Activity.onResume()