我需要编写一个可以接收UDP数据包的Android应用程序,并且每个应用程序都使用OpenGL在屏幕上显示一个新对象。
我尝试过以下方法: 我的OpenGL渲染器类有一个每帧渲染的对象的ArrayList,我创建了一个函数,在调用时将新对象添加到该列表中。
在我的主要活动中,我创建了一个新线程来处理传入的UDP数据包。每次收到新数据包时,都会向处理程序发送一条消息,该处理程序调用将新对象添加到列表中的函数。
这首先工作,当收到数据包时,显示对象,但是如果我按下BACK并立即再次启动应用程序,即使正在接收数据包,新对象也不会再显示(我可以告诉通过日志)。
这是正确的方法,但我遗漏了一些东西,或者有更好的方法来达到预期的效果吗?
答案 0 :(得分:0)
我设法解决了这个问题。我不得不将对象列表声明为静态,我不太清楚为什么。似乎在Activity被销毁并重新启动之后,“add”函数修改的列表与正在渲染的对象列表之间存在一些混淆。
如果有人能够解释发生了什么事,那就太好了。 谢谢!
答案 1 :(得分:0)
我发现导致问题的原因。网络线程是问题所在。它将在应用程序关闭后继续运行,因此会更新错误的列表。我必须在调用onDestroy()时使线程停止。
为了修复它,我添加了一些“停止”标志来打破while(true)循环但是仍然不能正常工作,所以诀窍是关闭等待数据的套接字(s.receive() )。