Возможно ли завершить процесс через 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 бессмысленны.
Комментариев нет:
Отправить комментарий