TimerTasks не идеальны для использования в среде Android, потому что они не учитывают контекст.Если ваш контекст исчезнет, TimerTask по-прежнему будет терпеливо ждать в фоновом режиме, в конечном итоге вызывая и вызывая сбой вашего приложения, поскольку его действие было ранее завершено.Или он может хранить ссылки на вашу активность после ее закрытия, предотвращая ее сборку мусора и потенциально заставляя ваше приложение исчерпать память.
Вместо этого используйте postDelayed (), который автоматически отменит задачукогда действие отключено.
final int delay = 5000;
final int period = 1000;
final Runnable r = new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(),"RUN!",Toast.LENGTH_SHORT).show();
postDelayed(this, period);
}
};
postDelayed(r, delay);
Кстати, если вам когда-нибудь понадобится отменить задачу вручную, вы можете использовать removeCallbacks(r)
, где r - это исполняемый файл, который вы опубликовали ранее.