Обслуживание приложения останавливается, когда телефон не заряжается
Моя активность запускает службу, позвонивstartservice()
, Для упрощения моей задачи допустим, что служба будет счетчиком, а счетчик будет увеличиваться каждые 10 секунд.
Timer t_counter;
int counter = 0;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
t_counter = new Timer();
t_counter.schedule(new TimerTask() {
@Override
public void run() {
counter++;
Log.d("counter: ",Integer.toString(counter));
}}, 0, 10000);
return Service.START_STICKY;
}
Когда телефон заряжается, (или в режиме отладки - так как я вижуLogcat
) сервис работает как положено. Примерно каждые 10 секундLogcat
показывает информацию об отладке, когда приложение находится в фоновом режиме или нет. Но когда я отключил телефон, служба перестает работать через некоторое время. Событие, когда приложение (активность, запустившая сервис) активно. Обратите внимание, что служба не уничтожена, просто отложена или что-то в этом роде.
Потому что, когда я снова подключаю мобильный телефон, таймер продолжает работать, и значение счетчика увеличивается со значения, при котором я только что отключил телефон. Таким образом, если служба была уничтожена, то значение снова было бы нулевым. (также я отлаживаю жизненный цикл службы и не вижу,onStartCOmmand()
onDestroy()
был бы назван)
Я искал решения для этого, но я думаю, что я не нашел правильный ответ для этого поведения. Я знаю, что я должен использоватьAlarmManager
вместо таймера. Или это также будет работать, если я поставлю сервиспередний план отstartForeground()
или, может быть, отдельныйпроцесс решил бы эту проблему. Но я хотел бы знать, почему мое решение работает с зарядкой. Также, где я могу найти информацию об этом "холостой ход» состояние службы. (не выполняет расписания таймера, но не уничтожается) Спасибо!