使用UDP更新要呈现的对象列表

时间:2011-07-25 15:12:11

标签: android multithreading opengl-es udp

我需要编写一个可以接收UDP数据包的Android应用程序,并且每个应用程序都使用OpenGL在屏幕上显示一个新对象。

我尝试过以下方法: 我的OpenGL渲染器类有一个每帧渲染的对象的ArrayList,我创建了一个函数,在调用时将新对象添加到该列表中。

在我的主要活动中,我创建了一个新线程来处理传入的UDP数据包。每次收到新数据包时,都会向处理程序发送一条消息,该处理程序调用将新对象添加到列表中的函数。

这首先工作,当收到数据包时,显示对象,但是如果我按下BACK并立即再次启动应用程序,即使正在接收数据包,新对象也不会再显示(我可以告诉通过日志)。

这是正确的方法,但我遗漏了一些东西,或者有更好的方法来达到预期的效果吗?

2 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。我不得不将对象列表声明为静态,我不太清楚为什么。似乎在Activity被销毁并重新启动之后,“add”函数修改的列表与正在渲染的对象列表之间存在一些混淆。

如果有人能够解释发生了什么事,那就太好了。 谢谢!

答案 1 :(得分:0)

我发现导致问题的原因。网络线程是问题所在。它将在应用程序关闭后继续运行,因此会更新错误的列表。我必须在调用onDestroy()时使线程停止。

为了修复它,我添加了一些“停止”标志来打破while(true)循环但是仍然不能正常工作,所以诀窍是关闭等待数据的套接字(s.receive() )。