Java 安卓应用程序从睡眠中恢复时的奇怪行为

Java 安卓应用程序从睡眠中恢复时的奇怪行为,java,android,multithreading,opengl-es,Java,Android,Multithreading,Opengl Es,既然我被困在这个问题上,不知道我的错误在哪里,我需要问你们。 当我第一次启动应用程序时,一切正常,但当我按下手机上的“后退”按钮回到主屏幕并再次启动应用程序时(这不是一个真正的新启动,因为应用程序进入睡眠状态),它有一个非常奇怪的行为 我使用opengles在屏幕上绘制纹理,当我触摸时,纹理会发生变化。触摸将布尔值设置为true,指示绘制其他纹理。但不知何故,当我测试它的值时,它总是错误的,即使它刚从触摸事件中写入为真。我想知道,因为只有当我按下手机上的“后退”按钮时才会发生这种情况。当我用ho

既然我被困在这个问题上,不知道我的错误在哪里,我需要问你们。 当我第一次启动应用程序时,一切正常,但当我按下手机上的“后退”按钮回到主屏幕并再次启动应用程序时(这不是一个真正的新启动,因为应用程序进入睡眠状态),它有一个非常奇怪的行为

我使用opengles在屏幕上绘制纹理,当我触摸时,纹理会发生变化。触摸将布尔值设置为true,指示绘制其他纹理。但不知何故,当我测试它的值时,它总是错误的,即使它刚从触摸事件中写入为真。我想知道,因为只有当我按下手机上的“后退”按钮时才会发生这种情况。当我用home(主页)按钮返回主屏幕,然后返回应用程序时,这种情况不会发生,一切正常

首先,我认为它有两个不同的线程(活动渲染线程和触摸事件的surfaceview线程),但即使同步所有get/set方法,它仍然不起作用。我开始认为触摸线程仍然在旧对象上运行,并且在渲染线程中的引用被新实例化时更改了值,所以布尔值是通过触摸设置的,但是渲染线程只接受默认值,因为它们获得了不同的对象,这显然是不可能的

我的知识已经不多了,所以请启发我

编辑:我发现了错误。。。当设备从睡眠中恢复时,它创建了另一个对象(带纹理的正方形),然后触摸事件发生在旧对象上,而旧对象没有被挖掘,新对象被绘制


如果有人能告诉我,当它从睡眠中恢复时,会调用哪些确切的方法,那也太好了?是只写在简历上还是还有更多?那么引用呢,它们是否也会被删除,因为不应该创建另一个对象,我甚至测试==null,然后创建一个新的对象,但不知怎的,当它回来时,这似乎是真的。作为第二个问题的答案,您可以在这里了解有关活动生命周期的更多信息:

我通常做的是让一个资源管理器知道加载了什么,并处理纹理、模型等的生命周期。当我的应用程序停止或暂停时,资源管理器卸载资源(暂停时,您可能不会这样做,只有在停止时),当应用程序恢复时,重新加载所有资源并重新生成OpenGL上下文(请记住,除非您执行某些操作,即在清单中声明,否则系统将破坏OpenGL上下文)。您需要设置纹理、缓冲区对象等。您可以扩展此想法,以处理应用程序生命周期中需要持久化的所有内容


快乐编码!

您能否发布gl渲染器代码以及触摸事件中设置布尔标志的部分。这可能有助于我们更好地解决此问题