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