내 MainActivity는 UdpListener라는 또 다른 스레드를 시작합니다. onResume에서 스레드가 시작되고 (작동 함) onPause에서 중지해야하지만 socket.close()는 LogCat에 "시스템 호출이 취소 된"오류 메시지를 발생시킵니다. UdpListener 자체는 JUnit 테스트에서 잘 작동하므로이 문제는 일종의 Android 문제 여야합니다. ,안드로이드 socket.close()가 "시스템 호출이 취소되었습니다"?
@Override
public void onPause() {
super.onPause();
try {
udpListener.stopThread();
}
catch (MyOwnException e) {
//TODO AlertDialog
}
}
serverSocket.close() 다른 지점의 실행되고 로그 캣 항목을 발생합니다
private void setThreadRunning(boolean running) throws MyOwnException {
this.running = running;
if (running) {
try {
serverSocket = new DatagramSocket(9800);
}
catch (SocketException e) {
exceptionThrown = true;
this.running = false;
Log.e(TAG, e.getMessage());
if (serverSocket != null && !serverSocket.isClosed()) {
serverSocket.close();
}
throw new MyOwnException(e);
}
}
else {
if (serverSocket != null && !serverSocket.isClosed()) {
serverSocket.close();
}
}
}
public void stopThread() throws MyOwnException {
setThreadRunning(false);
}
MainActivity.onPause() :
이 내 스레드의 대응 방법이 있습니다 하지만 왜?
UPDATE
어쩌면 가까운() 현재는 "수신"에 차단하는 모든 스레드에서 SocketExceptions을 발생하기 때문에 달빅가 오류로 인식하지만,이 예외가이 문제에 관련이 있는지 잘 모르겠어요. 나는 SocketException이의에서는 try..catch와 실행 방법에 수신() 호출을 둘러싸고 때
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/DatagramSocket.html#close()
왜 그 뜻입니까? stopThread()를 호출하면 else 분기에서 소켓을 닫습니다. 매니페스트 파일의 권한은 무엇입니까? – hovanessyan
소켓을 닫지 만 오류가 발생합니다 (LogCat은 오류로 표시 함). 내 권한은 WRITE_EXTERNAL_STORAGE 및 INTERNAME이지만 권한 문제는 아니라고 생각합니다. 왜 스레드를 시작할 수 있어야합니까? – Bevor