私の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()
どういう意味ですか? stopThread()を呼び出すと、elseブランチのソケットが閉じられます。マニフェストファイルの権限は何ですか? – hovanessyan
これはソケットを閉じますが、エラーが発生します(LogCatはエラーを表示します)。私のアクセス許可はWRITE_EXTERNAL_STORAGEとINTERNETですが、私はそのアクセス権の問題は考えていません。理由はなぜスレッドを開始できるのかということです。 – Bevor