Мое приложение состоит из одного файла Activity
. В этом упражнении я создаю несколько HandlerThread
, которые запускаются в цикле для выполнения операций блокировки сокетов.
В настоящее время я отправляю сообщение о выходе всем из этих HandlerThread
во время моего Activity.onDestroy()
.
Иногда, когда я открываю свое приложение, закрываю его и перезапускаю, оно падает (много раз из-за отправки сообщения в поток обработчика, который не запущен).
Мой вопрос: Как правильно закрыть HandlerThread
, когда я закрываю свое приложение? (Обратите внимание, что эти потоки могут блокироваться в операции сокета).
EDIT: дополнительная информация: у меня есть пул потоков обработчиков, который инициируется в onCreate (нет проблем, когда я запускаю свое приложение в первый раз).
Каждый исполняемый цикл обработчика обернут
if (shouldRun) {
//body
}
else {
close();
}
утверждение.
метод close удаляет все ожидающие сообщения и исполняемые файлы и отправляет обработчику сообщение, которое заставит его вызвать его looper.quit()
. Таким образом, если текущий поток обработчика заблокирован операцией ввода-вывода, только после того, как он закончит ее, он выйдет ().