В настоящее время я запускаю нить из службы, чтобы выполнить некоторые фоновые работы. Теперь существует вероятность того, что Thread сбой или я хочу, чтобы прерывал поток из Сервиса. Так как я должен:Остановка прерывания потока/потоков после сбоя?
- остановить тему добросовестной, (жесткую)
- исключения уловов и вызовите службу о ручке InterruptedException аварии
- если прерван во время сна()
- является Thread. isInterrupted - хороший способ определить, остановился ли поток?
То, что я сделал до сих пор является следующее:
@Override
public void run() {
try {
while (!Thread.currentThread().isInterrupted()) {
doMyBackgroundWork();
sleep();
}
}catch(Exception e){
ExceptionHandler.logAndSendException(e);
Thread.currentThread().interrupt();
if(crashedListener != null){
crashedListener.onThreadCrashed();
}
}
LOG.i("Thread stops now.");
}
private void sleep() {
try {
sleep(frequency);
} catch (InterruptedException e) {
//what to do here? it can happen because I stopped it myself
}
}
Таким образом, в первом я бегу моя тема, пока она не будет прервана. Если возникло какое-либо исключение, я хочу начать новый Thread, поэтому my Service реализует интерфейс прослушивателя, и я вызываю его, как только вызывается Исключение. Я знаю, что ловить все не рекомендуется, , но мне нужно знать, останавливается ли Thread, без опроса Thread.isAlive() все время.
Кроме моих четырех вопросов выше:
- мой код надежен и делает то, что мне нужно?
- Можно ли вызвать прерывание на самой теме?
Спасибо!
Возможно, это поможет вам, сделайте новую тему для проверки делает исключение брошено – RadijatoR