Страницы

Поиск по вопросам

среда, 13 марта 2019 г.

Завершение процесса

Возможно ли завершить процесс через onBackPressed() ??
не получается так:
h = new Handler() { public void handleMessage(android.os.Message msg) { new RequestREFRESH().execute(API_URL); } };
System.out.println("Запускаю цикл обновления"); Thread t = new Thread(new Runnable() { public void run() {
for (int i = 1; i < 86400; i++)//86400-секунд в сутках { h.sendEmptyMessage(i); System.out.println("Запускаю функцию обновления"); try { System.out.println("Приостанавливаю поток на 5 секунд"); Thread.sleep(5000); //Приостанавливает поток на 5 секунд } catch (InterruptedException e) { System.out.println("Ошибка задержки среды"); e.printStackTrace(); } }
} }); t.start();
@Override public void onBackPressed() {
if (t != null) { Thread dummy = t; t = null; dummy.interrupt(); }
}
переделал так:
h = new Handler() { public void handleMessage(android.os.Message msg) { new RequestREFRESH().execute(API_URL); } };
System.out.println("Запускаю цикл обновления"); t = new Thread(new Runnable() { public void run() {
try { for (int i = 1; i < 86400; i++)//86400-секунд в сутках { if (!t.isInterrupted()) { h.sendEmptyMessage(i); System.out.println("Запускаю функцию обновления");
try { System.out.println("Приостанавливаю поток на 5 секунд"); Thread.sleep(5000); //Приостанавливает поток на 5 секунд } catch (InterruptedException e) { System.out.println("Ошибка задержки среды"); e.printStackTrace(); }
} else { throw new InterruptedException(); } } } catch (InterruptedException e) { System.out.println("Thread is interrupted"); }
} }); t.start();
@Override public void onBackPressed() {
if (t != null) { Thread dummy = t; t = null; dummy.interrupt(); }
}
получил ошибку - FATAL EXCEPTION: Thread-83


Ответ

У Вас после interrupt() должен сработать блок catch (правда не сразу, конечно). Добавьте в него break, чтобы выйти из цикла и корректно завершить работу потока.
Также корректно было бы добавить в условие цикла !isInterrupted(), помимо условия i < 86400.
ОБНОВЛЕНО
Переделали Вы странно. Достаточно было в блок catch после вывода e.printStackTrace() вписать команду break, а также изменить условие в цикле на i < 86400 && !isInterrupted()
Еще один try-catch и выброс своего exception бессмысленны.

Комментариев нет:

Отправить комментарий