Вопрос по alarmmanager, android-broadcast, broadcastreceiver, android – AlarmManager не работает, когда приложение принудительно закрыто

8

Документация дляAlarmManager начинает это

Примечание. Диспетчер тревог предназначен для случаев, когда вы хотите, чтобы код вашего приложения запускался в определенное время, даже если ваше приложение в данный момент не запущено. Для обычных операций синхронизации (тики, тайм-ауты и т. Д.) Проще и намного эффективнее использовать Handler.

Однако, как только мое приложение закрыто (принудительно закрывается из диспетчера задач), мой сигнал тревоги не работает, иOnReceive метод никогда не вызывается внутри приемника вещания. Я нацеливаюсь на 4.x.

Какие'происходит?

@Shrikant В чем разница между "приложение не работает " а также "приложение силы закрыто "? berserk
Пожалуйста, покажите нам, как вы настраиваете будильник, и укажите в своем манифесте запись для получателя будильника. Pork 'n' Bunny
Когда происходит принудительное закрытие, все объекты, связанные с этим приложением, очищаются, и, следовательно, диспетчер аварийных сигналов также очищается. В документации есть информация, когда приложение находится внормальный" условие, т. е. его сила не закрыта. Диспетчер аварийных сигналов может работать, даже если приложение не запущено. Shrikant

Ваш Ответ

1   ответ
10

Более длинная версия состоит в том, что Android предполагает, что с приложением что-то не так, если пользователю пришлось принудительно закрывать его вручную. Поэтому все действия (BroadcastReceiver 's, тревоги и т. д.), связанные с приложением, не будут инициированы, пока пользователь не запустит приложение вручную хотя бы один раз. Например, приложениеЗагрузочный BroadcastReceiver не будет вызываться при выключении и включении устройства в этом состоянии, пока пользователь не запустит приложение, а затемследующий событие загрузки устройства будет доставлено в приложениеBroadcastReceiver.

Это поведение подтверждено разработчиками Android Framework:https://groups.google.com/forum/?fromgroups=#!topic/android-developers/anUoem0qrxU

* отредактировано для грамматики добавил пример поведения

@clu Нет, пользователь не отключает будильник, если пользователь убил ненадлежащее поведение приложения или это приложение зависло в результате его собственного неправильного поведения, Android остановит все, что связано с этим приложением, чтобы защитить пользователя от (дальнейшего) вреда приложения. Удаление приложения из системного будильника является частью этой процедуры. Kai
@ Basher51 отличный вопрос. Должны ли мы перенести все тревоги в классе приложения? motis10
@kai: Менеджеры аварийных сигналов убиваются при сбое приложения? Если да, то должны ли мы устанавливать аварийные сигналы в классе приложения / или какой подход лучше использовать в таких ситуациях? Basher51
Хорошо, это странно для меня. Может быть, пользователь убил будильник, потому что он хотел освободить ресурсы, но он все еще хочет, чтобы будильник сработал на следующее утро? Как это работает? clu

Похожие вопросы