Я реализовал сервис, который циклически обновляет пользовательский интерфейс с произвольным интервалом. При изменении интервала обновления я хочу остановить текущий обработчик и начать заново с новым интервалом. Как я уже читал в других темах, невозможно прервать обработчик после его запуска. Однако упомянутые решения, такие как удаление обратных вызовов и сообщений
handler.removeCallbacksAndMessages(null);
handler.removeCallbacks(runnable);
, такие как реализация переключателя уничтожения
started = false;
if(started) {
//do work..
}
, не помогли вообще. Когда я перезагружаю свою службу с обновленным интервалом, обработчики не останавливаются, вызывая одновременное выполнение нескольких обработчиков.
Кто-то знает, что я делаю неправильно или как исправить ситуацию? Цени любую помощь! Спасибо!
//Mainactivity
startService(new Intent(this, updateService.class));
public class updateService extends IntentService {
private boolean started = false;
private Handler handler = new Handler();
public updateService() {
super("updateService");
}
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
// Try to stop handler when startservice is called and start new one afterwards
stop();
start();
return super.onStartCommand(intent, flags, startId);
}
public void start() {
started = true; // Didn't help
int timer = config_store.getPreference("refresh_interval"));
if (timer !=0){
handler.postDelayed(runnable, timer);
}
else {
stop();
}
}
public void stop() {
started = false;
handler.removeCallbacksAndMessages(null); // Didn't help
handler.removeCallbacks(runnable); // Didn't help
}
private Runnable runnable = new Runnable() {
@Override
public void run() {
if(started) { // Didn't help.
// Update job
doJob();
// Start over again
start();
}
}
};
}