2016-12-11 4 views
1

Я установил аварийные сигналы, чтобы уведомить пользователя в разное время. Я проверяю с "ADB dumpsys оболочки тревоги" и они выглядят какПочему менеджер аварийных сигналов Android забывает о тревогах?

RTC_WAKEUP # 2: Сигнализация {433c7328 типа 0 com.app.package} тип = 0 whenElapsed = 89936417 при = + 9h8m5s417ms окна = -1 repeatInterval = 0 кол = 0 операция = PendingIntent {42e8e7f8: PendingIntentRecord {42deb070 com.app.package broadcastIntent}}

иногда они остаются и работают в течение по крайней мере 2-х дней (я не испытывал больше), иногда они все они ушли через несколько часов или даже раньше, прежде чем первое уведомление должно было состояться, и «adb shell dumpsys alarm» больше не отображает мои записи. (Я тестировал 2 устройства, Android 4.0 и 4.4)

Я знаю, что диспетчер аварийных сообщений забывает записи после перезагрузки устройства, и я позаботился об этом случае и повторно добавил их позже. Но, очевидно, есть и другие случаи, когда диспетчер аварийных сообщений забывает записи без перезагрузки. Я хотел бы знать, какие именно эти случаи и как их обрабатывать.

ответ

0

От AlarmManager

Этот класс обеспечивает доступ к услугам системы сигнализации. Это позволяет планировать запуск приложения в определенный момент в будущем. Когда будильник погаснет, Записанное для него намерение транслируется системой, автоматически запуская целевое приложение, если оно еще не запущено. Зарегистрированные аварийные сигналы сохраняются, когда устройство спит (и при необходимости может разбудить устройство, если оно отключится в течение этого времени), но будет очищено, если оно выключено и перезагружено.
он будет работать до тех пор, пока ваше приложение не будет убито или устройство не будет перезагружено. (Если вы удалили приложение из недавнего списка или из Диспетчера приложений, вы убьете приложение. Это означает, что вы полностью уничтожили приложение. AlarmManager вашего приложения был удален.)
в некоторых случаях, когда ваше приложение находится в фоновом режиме и блокирует его, чтобы получить доступ к более памяти.

Вы можете прочитать больше о применении убийства в How to create a persistent AlarmManager и How to save Alarm after app killing?