Я создал сервис для трансляции данных таймера для различных действий.Обычно он работает нормально без проблем, но есть случаи, когда перезапуск Android не работает должным образом.
У него также есть три приемника вещания:
1 - Событие отключения экрана: для остановкиПередача данных таймера и установка будильника в alarmanager, когда служба заканчивается, поэтому я смогу воспроизводить уведомления о завершении для пользователей, которые будут присутствовать.
2 - Экран по событию: для продолжения передачи данных таймера,Я также отменяю любой ожидающий сигнал тревоги.
3 - Приемник для сигналов тревоги.Обычно это происходит, когда экран выключен, как описано в 1.
Моя служба запускается с startForeground и возвращает START_REDELIVER_INTENT.Так как у начального намерения есть начальная дата таймера, я могу воссоздать статус сервиса без проблем.Приемник широковещательной сигнализации и onStartCommand используют одну и ту же процедуру обработки дескрипторов для запуска или продолжения обслуживания.
Все это прекрасно работает.Для короткого таймера (<30 мин) я не нахожу никаких проблем.Экран может быть включен, выключен, изменить одно и то же время от включения до выключения и от выключения до включенияТакже деятельность может быть спереди или сзади.Я играю со всеми этими возможными состояниями.Во всех случаях моя служба и активность работают нормально. </p>
Мои проблемы возникают, когда какой-то таймер длиннее (> 30 минут, обычно я настраиваюсь на 35 минут).Иногда это может быть вызвано тем, что Android убивает меня.Это нормально, так как я понимаю, что Android делает это, чтобы улучшить пользовательский опыт.Проблема в том, что когда я захожу в «настройки / приложения / службы», я вижу свою службу в состоянии «перезапуск».Я подозреваю, что это означает, что Android еще не запустил его, и это запланировано.Это показывает это состояние в течение долгого времени (у меня не было пациента, чтобы сказать, если оно изменится больше, чем другие полчаса ....)
Проблема в том, что когда в этом состоянии, это может длиться вечно (Я смотрю на это, и служба никогда не запускается), таймер (в моих часах) достигает тайм-аута, диспетчер будильника запускает мои намерения, но так как моя служба еще не запущена и трансляция не зарегистрирована, я не могу сделатьперсонал для тайм-аутов (игровые уведомления).Таким образом, пользователь не знает, что сервисный таймер закончился, и это серьезная проблема.
Это очень буйно.Так как служба убита почти в любом прогоне, прошло 30 минут, в то время как другие службы не убиты.
Мой вопрос: что именно происходит?Как я могу правильно справиться с этой ситуацией, чтобы правильно определить срабатывание сигнализации или, что еще важнее: как заставить принудительно перезапустить службу?
Для добавления некоторых справочных данных:
Мой сервис имеет очень мало памяти по сравнению с другими, а также не выполняет длинные операции, он использует только handler.postdelayed ("sendUpdatesToUI", 250), когда экран включен, и ничего, когда экран выключен., только ожидание, что Аварийный менеджер отправит намерение истечения времени ожидания.
Когда время истекло, и пользователь открывает действие, он получил намерение передачи данных таймера от службы и, как он видит, достигнуто времязатем он останавливает службу.
Я понимаю и принимаю, что пользователь может убить службу, когда захочет, и я принимаю это.Проблема здесь не в том, что пользователь, а в Android перезапускает службу.
Когда служба отключена, onDestroy не вызывается.
Использование 2.3.4 версия.