Android TimerTask не завершается после закрытия приложения

Как я могу завершить работу с TimerTask после закрытия приложения? Сборщик мусора не работает должным образом или просто не хочет завершать какие-либо фоновые задачи или потоки.


person pumukel    schedule 24.10.2014    source источник
comment
определить app was closing ...   -  person Selvin    schedule 24.10.2014


Ответы (2)


Предполагая, что вы хотите остановить его, когда действие будет уничтожено:

@Override
protected void onDestroy()
{
    super.onDestroy();
    yourTimer.cancel();
}

Или, если вы хотите остановить его, когда ваша активность скрыта:

@Override
protected void onStop()
{
    super.onStop();
    yourTimer.cancel();
}

В соответствии с рабочим процессом действия выберите лучший метод, при котором ваш таймер должен быть отменен:

введите здесь описание изображения

person ToYonos    schedule 24.10.2014
comment
Действительно, трудно сказать, когда он называется, но, в конце концов, он - person ToYonos; 24.10.2014
comment
именно в этом суть, я не хочу отменять свою фоновую задачу в методе активности, потому что она периодически обновляет данные, которые используются в разных действиях. Я просто хочу закончить свою задачу, когда приложение закрывается... - person pumukel; 24.10.2014
comment
Невозможно вызвать какое-либо действие при закрытии приложения. - person ToYonos; 24.10.2014
comment
Итак, невозможно иметь фоновый поток, который может работать за различными действиями и правильно закрываться? Итак, мне всегда нужно запускать и останавливать каждый раз, когда действие создается и останавливается? - person pumukel; 24.10.2014
comment
Вы должны сами управлять этой темой. Чего вы не можете сделать, так это остановить его в тот момент, когда Android убивает ваше приложение. Вы можете привязать окончание своего потока только к состоянию активности или чему-то, что вы можете предсказать. - person ToYonos; 24.10.2014

Вы должны остановить любой поток/задачу в onDestroy() в своей деятельности. Кстати, вы не должны использовать TimerTask в Android. Проверьте этот вопрос SO: TimerTask vs Thread.sleep vs Handler postDelayed - наиболее точно вызывать функцию каждые N миллисекунд?

Чтобы обновить данные, вы можете сделать это в сервисе (и вы должны, а не в активности).

person Jakub    schedule 24.10.2014