Я думаю, что есть несколько способов сделать это. Я бы не использовал таймер в любом случае.
Вы можете использовать обработчик для запуска вашей задачи в вызове postDelayed. Тогда ваша задача должна была бы перерегистрировать себя в обработчике изнутри себя.
final int ONE_SECOND = 1000; // one second
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
... // do some stuff
if (expression) {
handler.postDelayed(this, ONE_SECOND);
}
}
}, ONE_SECOND);
Это сохранит задачу, пока ваше приложение живо. Вы также можете настроить скорость задержки в postDelayed в Runnable. Этот способ почти предсказуем, если вы сделаете еще один Looper. Использование основного потока может или не может быть целесообразным в зависимости от того, что задача.
Существует также AlarmManager, доступ к которому можно получить через интерфейс Context, который предназначен для повторяющихся задач с более точными интервалами. Его немного сложнее в использовании, но вы получаете гибкость от использования RTC и постоянных повторяющихся задач.
AlarmManager manager = mContext.getSystemService(Context.ALARM_SERVICE);
manager.setRepeating(AlarmManager.RTC,
<start_time_millis>,
<period_millis>,
pendingIntent);
Например, ожидающее намерение может запустить широковещательное намерение, которое вы можете прослушать в другом месте. Вы можете создать это отложенное намерение в onCreate вашего пользовательского объекта Application и отменить намерение в onTerminate ().