Каков надлежащий контекст, в котором AlarmManagers должны быть объявлены и инициализированы так, чтобы они сохранялись бесконечно (или до перезагрузки системы или до тех пор, пока Task Killer не уничтожит ее, реалистично) и избегайте мусора коллекция. Но также допускают изменения в сигнале тревоги в рамках всего приложения.Android AlarmManager прекращает стрельбу по прошествии длительного времени
Вся причина, по которой я использую AlarmManager, заключается в том, чтобы исправить необходимость работы службы в любое время. Однако, чтобы выполнить этот подвиг, где создан AlarmManager? Я бы предположил, что он не может быть создан в службе, которая затем отключается/уничтожается, потому что в конечном итоге объект тревоги исчезнет, и тревоги перестанут стрелять - не так ли?
Мне понравилась идея примера AlarmManager из другого вопроса, в котором класс MyAlarm создается как расширение BroadcastReceiver для onReceive будильника, и AlarmManager инициализируется в конструкторе этого класса. Но как эта реализация работает, если экземпляр MyAlarm требуется в нескольких контекстах. Например, из обработчиков событий через несколько объектов Activity. Из обработчиков событий нескольких виджетов. В пределах рабочего обслуживания. Все это может привести к отключению или включению тревоги. Я полагаю, создайте локальный экземпляр везде, где вам нужно иметь дело с сигналом тревоги, и поскольку параметр pendingIntent одинаковый для всех экземпляров, вы фактически будете работать с виртуальным «singleton».
Это только концептуально на данный момент, потому что я понятия не имею, как я буду проверять «сбор мусора» диспетчера аварийных сигналов, который может произойти 8, 12,? спустя несколько часов, когда моя тревога просто случайно прекращает стрельбу. Моя цель состоит в том, что если телефон не перезагружен, а моя задача не была вручную убита пользователем, чтобы держать будильник в течение неограниченного времени. Спасибо
Извините, моя цель состояла в том, чтобы использовать AlarmManager, чтобы моя служба не нуждалась в запуске. Тревога на самом деле запустит сервис, и служба будет отключена после завершения работы. Реальный вопрос: где я инициализирую этот экземпляр AlarmManager для данного pendingIntent, чтобы он оставался бегущим навсегда, даже если, скажем, служба, изначально объявленная, больше не работает? – gauglerb
Служба - это всего лишь фоновый процесс, который сохраняется, так что вы можете делать такие вещи, как держать слушателя открытым. Вы не можете инициализировать AlarmManager так, чтобы он «запускался вечно», вы запускаете его в службе и поддерживаете эту службу. Как я уже сказал, вы можете упорствовать в этом, делая что-то время от времени, поэтому ОС не думает, что это мертвый процесс. Люди используют экранный будильник, так как каждый раз, когда пользователь пробуждает телефон, вы что-то делаете. Поскольку этого обычно достаточно часто, чтобы убедиться, что ОС не убивает службу, я бы попробовал это. –