我正在尝试在我的应用程序中正确使用OpenGL,并在使用生命周期方法时遇到一些问题:onPause()
和onResume()
。
活动生命周期
当活动暂停并恢复时,必须通知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
的步骤?
答案 0 :(得分:4)
onPause()
和onResume()
仍在破坏我的实施 - 但为了公平起见,他们不会再崩溃了:
The following GLSurfaceView methods can only be called after setRenderer is called: getRenderMode() onPause() onResume() queueEvent(Runnable) requestRender() setRenderMode(int)
在某些情况下,我setRenderer()
之前不调用Activity.onResume()
。