Я разработка Android приложении 3.1 Tablet, который запускает сервис с этой темой:Прерывать поток, когда он находится на socket.receive (пакет); выдает ошибку
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, который бросает это исключение, я предполагаю, что это нормальное поведение, так как вы фактически прерываете вызов, закрывая сокет. –
Спасибо. Так что мне не нужно беспокоиться, не так ли? – VansFannel
читайте это: http://stackoverflow.com/questions/7962121/how-can-i-stop-the-block-method-datagramsocket-receive-in-a-thread –