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