Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – onSurfaceChanged调用了两次大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用openGL ES创建一个Android应用程序,我有以下问题:

当我最小化应用程序,然后重新打开它时,在我的GLSurfaceView.Renderer中的onSurfaceChanged被调用2次.

我在onSurfaceChanged中有以下代码(和onSurfaceCreated,onDrawFrame中的类似代码):

Log.e("onSurfaceChanged",Integer.to@R_607_10495@ng(width)+" "+Integer.to@R_607_10495@ng(height));

所以我得到以下日志:

onSurfaceCreated
onSurfaceChanged 480 800
onDrawFrame
onSurfaceChanged 480 800
onDrawFrame
onDrawFrame
onDrawFrame
onDrawFrame
onDrawFrame
onDrawFrame
(...)

当我最小化时,将屏幕方向从纵向更改为横向,然后重新打开,onSurfaceChanged被调用3次.日志是:

onSurfaceCreated
onSurfaceChanged 480 800
onDrawFrame
onSurfaceChanged 480 800
onDrawFrame
onDrawFrame
onDrawFrame
onSurfaceChanged 800 480
onDrawFrame
onDrawFrame
onDrawFrame
onDrawFrame
onDrawFrame
onDrawFrame
(...)

我的问题:这是一个@L_674_8@吗?在我的应用程序中还是Android@L_674_8@?有一种方法可以在onSurfaceChanged上调用一次吗? (因为在onSurfaceCreated中我正在执行减慢应用程序的代码)

提前致谢

最佳答案
这不是一个@L_674_8@.
就个人而言,我在我的类中继承了GLSurfaceView的onSurfaceChanged并没有做太多.
我只根据新的分辨率设置视口,并将当前的分辨率尺寸保存到变量中.

不需要在onSurfaceChanged上重新创建纹理等OpenGL资源,而是选择ActivityCycle上的正确位置来创建和销毁OpenGL资产.

我在几个平台上运行我的游戏,如Android,亚马逊Fire TV和OUYA.我发现在所有这些平台上运行的是在onPause,onStop和onRestart上销毁GL资产,但我还保留一个标志,看看资产是否已被销毁,所以我不会在原始版本中销毁它两次.

我在onCreate,onRestart和onResume上创建了OpenGL资源(也使用了一个不创建它的标志两次).
如果您不希望游戏在暂停时丢失状态,则必须序列化游戏状态并将其写入文件并在以后恢复时加载.

希望这可以帮助.

同样,你无法真实地预测你会收到多少onSurfaceCreated,特别是它可能在不同的设备上表现不同.
但是,您始终可以信任ActivityCycle的行为与Google所描述的相同.

大佬总结

以上是大佬教程为你收集整理的android – onSurfaceChanged调用了两次全部内容,希望文章能够帮你解决android – onSurfaceChanged调用了两次所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。