好的,所以标题有点令人困惑,被授予。我将尝试更详细地解释一下。
我有一个启动画面,它基本上是一个简单/静态加载图形,在我的GLSurfaceView上显示为“对话框”。
我在onSurfaceChanged中加载了所有的GLTextures,而且everythnig很棒。
在我的 onPause()生命周期方法中,我有以下内容
myGLView.setVisibility(View.GONE);
并在 onResume()我有
myGLView.setVisibility(View.VISIBLE);
现在,如果用户在仍然显示加载对话框时按下“主页”键,那么会发生的情况是应用程序进入后台并调用以下内容(当应用程序在后台时)。 / p>
问题在于,当它点击 onDrawFrame 时,我的游戏会非常简短地出现在屏幕上(我们说的只是一小段时间)。
如何阻止这种情况发生?
我有一个解决方案是基于我之前发布的一个非常相似的问题的答案,这是使用布尔值来确定我的应用程序是在前台还是后台,所以在onDrawFrame中我会有像这样的东西:
public void onDrawFrame(GL10 gl) {
if (isAppInForeground){
//Main loop code here
}
}
唯一的事情是,即使应用程序正在运行,这也会在我的主循环中添加另一个(不必要的?)检查。在应用程序的部分性能密集期间(例如在设置等期间)但不确定主循环时,似乎可以这样做。
有更优雅的方法来解决这个问题吗?
修改
好的,上面的建议(使用 onDrawFrame 中的布尔值)不会解决问题。我仍然有一个闪烁(虽然不是我的应用程序的屏幕,只是一个空白的屏幕)。
已经完成了整整一天的工作,我不确定这是否只是Android的一般错误,也可能是Kit Kat 4.4.4的问题,甚至是Nexus 10的问题? (我现在没有其他设备可以测试)。这是我发现的......
如果我使用 myView.onPause(); ,我不会得到这种奇怪的闪烁效果,但是GL语境会丢失,这正是我想要避免的(我我的目标是旧Android版本,因此无法使用setPreserveEGLContextOnPause(true);
如果我从onDrawFrame中移除所有内容,并且甚至,如果我将GL视口的大小设为0,0,我仍然会出现这种情况(但现在又是只是一个空白的屏幕,只显示一小部分,而不是我的应用!!)。
无论是使用 View.GONE 还是 View.Invisible ,结果都是一样的。
如果我不调用setVisibility(View.xxxxx)或onPause();再说一次,我没有得到这个闪烁。我会留下它,但不调用这些会带来其他问题。
即使我将视图设置为 Gone 或 Invisible ,然后在onPause()中将其设置为 null ,它仍然 表现出问题!我不知道这是怎么回事。
哦,我应该指出这个问题是间歇性的。有时候效果很好。
再次,会欣赏一些想法
答案 0 :(得分:0)
如果您致电setRenderMode(RENDERMODE_WHEN_DIRTY),则只有在致电requestRender()后才会调用您的绘制方法。您可以从任何线程调用requestRender()。