【问题标题】:GLSurfaceView lifecycle methods onPause() and onResume()GLSurfaceView 生命周期方法 onPause() 和 onResume()
【发布时间】:2012-07-21 16:58:07
【问题描述】:

我正在尝试在我的应用程序中正确使用 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 的步骤?

【问题讨论】:

    标签: android opengl-es glsurfaceview


    【解决方案1】:

    onPause()onResume() 仍在破坏我的实现 - 但公平地说,他们不再因为崩溃而这样做:

    Documentation:

    The following GLSurfaceView methods can only be called after setRenderer is called:
    
    getRenderMode()
    onPause()
    onResume()
    queueEvent(Runnable)
    requestRender()
    setRenderMode(int)
    

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

    【讨论】:

    • 来自 setRenderer 的文档:“这个方法应该在 GLSurfaceView 的生命周期中调用一次且仅一次。”你确定你在做正确的事吗?或者也许我错过了什么。
    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多