여기에 몇 번 언급 된 것처럼 보이는 이상한 문제. 스레드가 있고 AsyncTask도 사용했으며 사용자 요청에 따라 AsyncTask가 실행을 중지하려고합니다. 당연히 while 루프에서 부울을 사용합니다. 스레드는 항상 다른 곳에서 false를 인쇄 할 때조차도 boolean을 true로 봅니다.Android - while 루프를 사용하여 스레드 중지
아래 코드는 도움이됩니다.
/**
* Opens new socket and listens on the specified port until a user stops the thread, the logview is updated with messages
*/
public void run() {
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
Log.e("Text2Server", "Starting Server");
this.running = true;
while(this.running) {
Log.i("Text2Server", "Server should be running: " + running);
try {
serverSocket = new DatagramSocket(port);
} catch (SocketException e1) {
e1.printStackTrace();
}
try {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
final String fromIP = new String(receivePacket.getAddress().toString());
final int fromPort = receivePacket.getPort();
final String received = new String(receivePacket.getData());
Date now = new Date();
final String logput = DateFormat.getDateTimeInstance().format(now) + " - Message from: " + fromIP + " through Port: " + fromPort + " with Message: " + received;
Log.i("Text2Server", logput);
//All UI Operations are done in this thread
uiHandler.post(new Runnable(){
@Override
public void run() {
logTextView.append(logput);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
serverSocket.close();
}
public void stopThread() {
this.running = false;
Log.i("Text2Server", "Stopping Server, value is now: " + running);
}
stopThread()를 호출하면 false가되지만 스레드는 여전히 잠시 동안 진입하여 사실을 인쇄합니다. 이견있는 사람?
감사합니다.
어떻게 stopThread를 호출합니까? – Rob
작업에서 스레드의 인스턴스를 만들고, 해당 활동에서 실행되도록 설정 한 다음 사용자가 단추를 누를 때 stopThread()를 호출합니다. –
로그에 "this.running"대신 "running"값이 표시됩니다. ... – BrainCrash