Android обрабатывает все ограничения AlarmManager

1

У меня есть приложение с будильником в магазине воспроизведения, которое очень хорошо работает на большинстве устройств, но, к сожалению, некоторые устройства сообщают, что будильник не срабатывает в установленное время, и я пришел к выводу, что существуют устройства, которые ограничивают работу приложений в фон и убивает тревогу менеджера!

Я обработал режим сна, используя следующий код:

if (Build.VERSION.SDK_INT >= 23)
{
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timeStamp, pendingIntent);
}
else if (Build.VERSION.SDK_INT >= 19)
{
alarmManager.setExact(AlarmManager.RTC_WAKEUP, timeStamp, pendingIntent);
}
else
{
alarmManager.set(AlarmManager.RTC_WAKEUP, timeStamp, pendingIntent);
}

Однако этого кажется недостаточно на некоторых устройствах.

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

Я хочу убедиться, что мой будильник работает отлично на всех устройствах и обрабатывает все сценарии, так что же можно сделать, чтобы убедиться, что мое приложение работает правильно и не уничтожено системой?

Теги:
clock
android-doze
alarmmanager

2 ответа

3

Вы должны использовать AlarmManagerCompat.setAlarmClock() для установки видимого пользователем будильника, подходящего для приложения будильника. Этот API использует setAlarmClock() на API 21+, который согласно его документации:

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

  • 0
    Спасибо, думаете, этот метод также предотвратит принудительное уничтожение приложения системой и, следовательно, диспетчером аварийных сигналов? Я видел два больших приложения в магазине, которые по-прежнему рекомендовали вручную занести их в белый список в режиме «не беспокоить» в настройках телефона @ianhanniballake
  • 0
    Пока вы используете CATEGORY_ALARM , вам не придется беспокоиться о «Не беспокоить». Это совершенно отдельная функция для принудительной остановки - это всегда отменяет все, что ваше приложение может сделать, чтобы проснуться, включая сигналы тревоги.
Показать ещё 3 комментария
0

Чтобы избежать всего этого различного поведения, вы можете использовать библиотеку заданий Evernote Android.

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

AlarmManager проблематичен и может не AlarmManager в новых ОС.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню