Я реализовал фоновый сервис для периодического обновления данных в моем приложении. Механизм работает хорошо, если мое android устройство включено, но вызывает проблемы, когда Android находится в спящем режиме:
Давайте представим, что служба работает каждые 15 минут, тогда Android переходит в спящий режим на 1 час и при повторном пробуждении услуга будет выполняться 4 раза за раз. Предпочтительный bahaviour будет запускать службу только один раз, если он пропустил 1 или более циклов из-за сна.
Чтобы периодически запускать свой код, я использую TimerTask:
public class updateService extends IntentService {
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
if(mTimer != null) {
mTimer.cancel();
}
mTimer = new Timer();
int timer = getPreference("refresh_interval") * 1000;
mTimer.scheduleAtFixedRate(new updateTask (), timer, timer);
return super.onStartCommand(intent, flags, startId);
}
class updateTask extends TimerTask {
@Override
public void run() {
// run on another thread
mHandler.post(new Runnable() {
@Override
public void run() {
// Do job
}
});
}
}
}
Буду признателен за любые предложения, как сделать лучше. Спасибо!