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

标签 android opengl-es onresume glsurfaceview onpause

我反复读到,在封闭 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/

相关文章:

android - TextView 未在 Android 的 onResume 中更新

java - 我的 Activity 中的 onResume() 发生 Android 崩溃 - 为什么?

使用 JetPack Compose 更改 Android 语言

javascript - 当从android调用带有一些js代码的php文件时,js代码是这种调用的输出

iphone - 在显示 GLkit View 之前添加一些 View - 从 UIview 导航到 GLkit View

android - Android 上缺少 cocos2d-x opengl 上下文(适用于 iPhone)

opengl-es - Android Studio NDK 错误,无法找到 GLES3/gl3.h,尽管它存在

Android ViewPager setCurrentItem 在 onResume 后不起作用

Android ListView 与单选模式下的 RadioButton 和自定义行布局

java - RxJava Flowable.create(),如何尊重subscribeOn()线程