2012-01-22 5 views
1

私のMainActivityは、UdpListenerと呼ばれる別のスレッドを開始します。 onResumeでは、スレッドが開始されます(これは動作します)。onPauseで停止する必要がありますが、socket.close()によってLogCatにエラーメッセージ "システムコールがキャンセルされました"が発生します。 UdpListener自体はJUnitテストでうまく動作するので、これは何らかのAndroidの問題でなければなりません。 、Android socket.close()は「システムコールがキャンセルされました」を引き起こしますか?

@Override 
public void onPause() { 
    super.onPause(); 

    try { 
     udpListener.stopThread(); 
    } 
    catch (MyOwnException e) { 
     //TODO AlertDialog 
    } 
} 

serverSocket.close()他の支店の実行され、LogCatエントリが発生します。

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をスローするためのDalvikはエラーとしてこれを認識しますが、この例外は、この問題に関連している場合、私はわかりません。私はのSocketExceptionののtry..catchとrunメソッドで受け取る()呼び出しを囲むとき、エラーはもうoccureしない

http://docs.oracle.com/javase/1.4.2/docs/api/java/net/DatagramSocket.html#close()

+0

どういう意味ですか? stopThread()を呼び出すと、elseブランチのソケットが閉じられます。マニフェストファイルの権限は何ですか? – hovanessyan

+0

これはソケットを閉じますが、エラーが発生します(LogCatはエラーを表示します)。私のアクセス許可はWRITE_EXTERNAL_STORAGEとINTERNETですが、私はそのアクセス権の問題は考えていません。理由はなぜスレッドを開始できるのかということです。 – Bevor

答えて

0

。私の例外処理は、このエラーを引き起こすいくつかの副作用があったと思います。

関連する問題