2012-01-22 1 views
1

내 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()

+0

왜 그 뜻입니까? stopThread()를 호출하면 else 분기에서 소켓을 닫습니다. 매니페스트 파일의 권한은 무엇입니까? – hovanessyan

+0

소켓을 닫지 만 오류가 발생합니다 (LogCat은 오류로 표시 함). 내 권한은 WRITE_EXTERNAL_STORAGE 및 INTERNAME이지만 권한 문제는 아니라고 생각합니다. 왜 스레드를 시작할 수 있어야합니까? – Bevor

답변

0

오류가 더 이상 발생 시킬수하지 않습니다. 내 예외 처리 일부 오류가 발생하는 부작용이 있었다을 추측한다.

관련 문제