【发布时间】:2012-07-04 17:41:12
【问题描述】:
我正在开发一个 Android 3.1 平板电脑应用程序,该应用程序使用此线程运行服务:
public class UDPServerThread extends Thread
{
[ ... ]
public void run()
{
while (!end)
{
try
{
byte[] buf = new byte[MESSAGE_SIZE];
// Wait an incoming message.
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// TODO: Notify Service with packet received
Message msg = new Message();
msg.obj = packet;
mServiceHandler.sendMessage(msg);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public void stopServer()
{
Log.v("UDPServerThread", "stopServer");
if (socket != null)
socket.close();
end = true;
}
}
当我从服务中调用 stopServer() 方法时,我收到以下错误:
java.net.SocketException: Interrupted system call
在socket.receive(packet); 上停止该线程的正确方法是什么?
【问题讨论】:
-
如果是 socket.receive 抛出该异常,我想这是正常行为,因为您实际上是通过关闭套接字来中断调用。
-
谢谢。所以,我不用担心,不是吗?
-
同样在将 end 设置为 true 之后,您可能希望等到您的线程真正完成。 (这与您的问题无关,只是一个提示;))
标签: java android multithreading sockets