Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序仅在第一次运行时正常工作_Android_Eclipse_Opengl Es 2.0_Avd - Fatal编程技术网

Android 应用程序仅在第一次运行时正常工作

Android 应用程序仅在第一次运行时正常工作,android,eclipse,opengl-es-2.0,avd,Android,Eclipse,Opengl Es 2.0,Avd,几天前,我开始开发我的第一款Android游戏。我选择使用OpenGLES2.0,因为它是最熟悉的选择。然而,我目前无法在真正的设备上测试游戏,因此我决定改用AVD,使用安装了Intel HAXM的4.0.3虚拟设备。这似乎非常有效,但我现在遇到了一个非常奇怪的问题 从Eclipse编译和运行游戏时,它工作得很好。但是,如果我再次运行游戏,无论是通过AVD还是从Eclipse,除了背景色之外,什么都不会绘制。如果我更改了代码中的任何内容,以便Eclipse必须重新编译应用程序,那么所有内容都会再

几天前,我开始开发我的第一款Android游戏。我选择使用OpenGLES2.0,因为它是最熟悉的选择。然而,我目前无法在真正的设备上测试游戏,因此我决定改用AVD,使用安装了Intel HAXM的4.0.3虚拟设备。这似乎非常有效,但我现在遇到了一个非常奇怪的问题

从Eclipse编译和运行游戏时,它工作得很好。但是,如果我再次运行游戏,无论是通过AVD还是从Eclipse,除了背景色之外,什么都不会绘制。如果我更改了代码中的任何内容,以便Eclipse必须重新编译应用程序,那么所有内容都会再次正常工作,但仅在第一次运行期间


我不知道发生了什么事。如果非要我猜的话,我会说AVD出了什么问题,但是有人知道解决这个问题的方法吗?如果需要,我将提供相关的源代码,但由于我不知道是什么导致了此类问题,我现在无法提供任何源代码。

您是否有任何代码正在保存或加载您的应用程序状态,但这些代码不起作用。也许通过onCreate/onStart/onPause函数?当您挂起或关闭正在被错误读回的应用程序时,您可能正在写入某些状态??调用Application->Clear Data(应用程序->清除数据)将重置此状态,除非您正在写入sd卡等公共区域。

应用程序暂停时,纹理似乎被删除,这导致它无法在屏幕上绘制任何内容。重新加载
onResume
函数中的纹理修复了该问题。

重新启动仿真器是否修复了该问题?是否清除数据(不重新安装)?否,并且重新创建AVD也无法修复它。然而,我发现,重新安装应用程序,就像Eclipse在重新编译时所做的那样,使它能够在一次运行中工作。这很奇怪。我想说,听起来好像有些资源没有被正确释放,但由于它仍然发生在您停止模拟器并再次启动它之后,所以情况可能不是这样。我想说下一步是清除整个模拟器上的数据,但这将卸载你的应用程序,重新安装它似乎可以修复它。。。你能在你的应用程序中发布一些清理代码吗?这有点尴尬,但实际上这也是我第一次使用Java。我的印象是它自己负责所有垃圾的收集。然而,我想我还没有实现glDelete*调用,因为Java没有析构函数,并且我的程序的结构仍然有点模糊。这可能是导致问题的原因吗?我觉得有点奇怪,在两次运行之间,这种情况会持续下去。这可能是,尽管像你一样,我觉得奇怪的是,这种情况会在重启期间持续下去。但是,除非您尝试,否则无法知道。:)也就是说,本机库在Java中没有GC。只有纯本机Java的东西可以,或者设计用于Java垃圾收集的东西。我错误地认为应用程序已停止,但它仍在后台运行。强制停止,然后重新启动,恢复了正确的行为。正如你所说,这可能意味着问题在于这些函数之一。给我一分钟,我会检查它们。读了一点,当游戏暂停时,OpenGL上下文似乎被破坏了。。。唉,我想我必须重新加载所有的纹理、VBO等。我试过之后会回来的。编辑:似乎只有重新加载纹理才有效!我可以安全地假设VBO、着色器等不必重新加载吗?我在这里帮不了你,因为我以前没有在Android应用程序中冒险使用OpenGL。话虽如此,我原以为你得重新装填所有东西。取决于你的应用程序是否暂停、停止或销毁,我想…onResume正是为了这个目的-当你的应用程序消失,Android执行另一个活动时,重新加载你需要的任何数据,同时销毁数据。@PeterCarpCenter我想我现在也应该重新加载着色器和VBO,为了安全起见,你应该选择彼得的答案,并在这里给他一些认可点STO@Martin我想这样做,但这需要他编辑他的答案,并为问题提供实际的解决方案。如果人们有同样的问题,他们将不得不阅读评论,以了解如果我只是接受他的答案,他们必须做什么。然而,如果他修改了他的答案,我会毫不犹豫地接受并投票表决。