Как прервать / прервать ожидание LocalServerSocket в фоновом потоке соединения в методе LocalServerSocker.accept ()?
Я пытался вызвать метод close () из другого потока, но, похоже, он не работает.
В проекте Android для него открыт билет: http://code.google.com/p/android/issues/detail?id=29939.
Кажется, проблема подтверждена Google, так как первый комментарий:
я думаю, что мы должны переписать это, чтобы использовать тот же базовый libcore вещи, и получить поведение прерывания бесплатно.
Обходной путь может заключаться в отправке пользовательской команды выключения в LocalServerSocket из другого потока, чтобы разблокировать принятие.
Вместо localSocket.close используйте это: (требуется API 21 +)
localSocket.close
try { Os.shutdown(localSocket.fileDescriptor, OsConstants.SHUT_RDWR) } catch (e: ErrnoException) { if (e.errno != OsConstants.EBADF) throw e // suppress fd already closed }