在安卓系统上,Libgdx的app.exit()不能关闭应用程序。

18
在我使用libGDX开发的Android应用中,当用户尝试退出游戏时,我使用Gdx.app.exit()命令来关闭游戏。这会关闭游戏,但是当用户重新启动应用程序时,所有的Textures都会乱码(无法正常使用该应用程序)。我发现,如果我从任务管理器中强制关闭应用程序,那么它将可以正确地重新启动。
为什么会出现这种情况?
1个回答

26

您发现了Java对象的生命周期(与应用程序进程的生命周期相关)与纹理对象的生命周期(与OpenGL上下文的生命周期相关,后者又与Activity的可见性相关)之间的不匹配。

在应用程序“退出”时,只有Activity会退出,Android会将进程缓存到后台。当您“重新启动”应用程序时,Android只会在同一进程中启动一个新的Activity。在这种情况下,Activity会找到一个有效的Java Texture对象,但它在OpenGL上下文中“指向”的底层字节已经消失了(因为当Activity不再可见时,OpenGL上下文被无效)。

解决方法是在Activity创建时重新加载纹理。您必须确保包含纹理的所有对象(以及包含包含纹理的对象等)都与Activity生命周期相关联。通常,这意味着避免使用静态变量(它们是应用程序生命周期的一部分),但如果您想要,可以通过跳跃来使全局变量无效并重新初始化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接