【发布时间】:2013-04-09 05:52:12
【问题描述】:
我正在尝试在 android 上制作多人游戏,其中玩家使用加速度计来移动物体。最初,我使用 TCP 发送包含播放器 X 和 Y 坐标作为 JSON 字符串的数据包,在附加到加速度计的 onSensorChanged() 内(使用 SENSOR_DELAY_GAME)。但由于延迟问题,我决定尝试 UDP。
现在早些时候,我创建了一个单独的线程来创建一个新的套接字,我使用了以下代码:
public void onSensorChanged(SensorEvent event) {
// Other Stuff
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println(coords.toString());
}
我有:
socket = new Socket(serverAddr, Port);
在另一个线程中。
由于NetworkOnMainThreadException,UDP没有提供任何这样的方法从主线程发送数据,我想我必须在另一个线程中进行数据包传输。但问题是我正在计算要在onSensorChanged() 内部发送的数据,并且我想在每次调用onSensorChanged() 时发送一个数据包。
我对 Java 和多线程比较陌生,并尝试阅读有关同步的内容,但在这里似乎无法正确理解和实现它。因此,如果有人能指出解决此问题的方法,我将不胜感激。
我还想知道在每个 SensorChange 发送坐标是否是个好主意,以及是否有办法优化数据,以便我仍然可以使用 TCP 而不会出现延迟问题。而且我还想知道是否有任何方法可以让onSensorChanged() 作为单独的线程运行...?
【问题讨论】:
标签: java android multithreading sockets udp