5

Документации для AlarmManager startes чтоAlarmManager не работает, когда приложение сила закрыта

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

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

Что происходит?

+0

пожалуйста показать нам, как вы настраиваете сигнал, и запись в манифесте для приемника тревоги. –

+4

Когда происходит принудительное закрытие, все объекты, связанные с этим приложением, очищаются и, следовательно, диспетчер аварийных сообщений также очищается. В документации есть информация, когда приложение находится в «нормальном» состоянии, т. Е. Его не принудительное закрытие. Менеджер аварийных сообщений может работать, даже если приложение не запущено. – Shrikant

+0

@Shrikant В чем разница между «app not running» и «app force closed»? – berserk

ответ

9

Что говорит @Shrikant, это в значительной степени ответ.

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

Такое поведение подтверждается в соответствии с проектом по Android каркасных дэвов: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/anUoem0qrxU

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

+0

Хорошо, это странно для меня. Может быть, пользователь убил будильник, потому что хотел освободить ресурсы, но они все еще хотят, чтобы будильник на следующее утро ушел? Как это работает? – clu

+0

@clu нет, пользователь не убивает будильник, если пользователь убил неправильное приложение или это приложение разбилось по его собственному проступку, Android остановит все, что связано с этим приложением, чтобы защитить пользователя от (далее) вреда от приложения. Удаление приложения из системного будильника является частью этой процедуры. – Kai

+1

@kai: Удаляются ли аварийные менеджеры при сбое приложения? Если да, то должны ли мы устанавливать аварийные сигналы в классе приложения/или как лучше всего подходит для таких ситуаций? – Basher51

Смежные вопросы