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