Механизм пробуждения (wakeups) в API AlarmManager позволяет разработчикам устанавливать будильник для пробуждения устройства в указанное время. Ваше приложение устанавливает будильник, вызывая один из методов set() в AlarmManager с флагом RTC_WAKEUP или ELAPSED_REALTIME_WAKEUP . Когда срабатывает будильник, устройство выходит из режима энергосбережения и удерживает частичную блокировку пробуждения , выполняя метод onReceive() или onAlarm() будильника. Если будильники срабатывают слишком часто, это может привести к разрядке батареи устройства.
Если ваше приложение чрезмерно часто выводит устройство из строя, вы можете воспользоваться инструкциями на этой странице, чтобы диагностировать и устранить проблему.
Устраните проблему
AlarmManager был представлен в ранних версиях платформы Android, но со временем многие сценарии использования, ранее требувшие AlarmManager теперь лучше удовлетворяются более новыми функциями, такими как WorkManager . В этом разделе приведены советы по уменьшению количества будильников, но в долгосрочной перспективе рассмотрите возможность миграции вашего приложения в соответствии с рекомендациями, изложенными в разделе лучших практик .
Определите места в вашем приложении, где вы планируете устанавливать будильники, и уменьшите частоту их срабатывания. Вот несколько советов:
Найдите вызовы различных методов
set()вAlarmManager, которые включают либо флагRTC_WAKEUP, либоELAPSED_REALTIME_WAKEUP.Мы рекомендуем включать название вашего пакета, класса или метода в имя тега вашего оповещения, чтобы вы могли легко определить место в исходном коде, где было установлено оповещение. Вот несколько дополнительных советов:
- В имени не следует указывать никакую личную информацию, например, адрес электронной почты. В противном случае устройство запишет в лог
_UNKNOWNвместо названия тревоги. - Не получайте имя класса или метода программно, например, вызывая
getName(), поскольку оно может быть обфусцировано Proguard. Вместо этого используйте жестко заданную строку. - Не добавляйте счетчик или уникальные идентификаторы к меткам тревожных сигналов. Система не сможет объединять тревожные сигналы, установленные таким образом, поскольку все они имеют уникальные идентификаторы.
- В имени не следует указывать никакую личную информацию, например, адрес электронной почты. В противном случае устройство запишет в лог
После устранения проблемы убедитесь, что будильники работают должным образом, выполнив следующую команду ADB :
adb shell dumpsys alarm
Эта команда предоставляет информацию о состоянии службы системы сигнализации на устройстве. Для получения дополнительной информации см. dumpsys .
Передовые методы
Используйте будильники только в том случае, если вашему приложению необходимо выполнить операцию, взаимодействующую с пользователем (например, отправить уведомление или оповестить пользователя). Список рекомендаций по использованию AlarmManager см. в разделе « Планирование будильников» .
Не используйте AlarmManager для планирования фоновых задач, особенно повторяющихся или сетевых фоновых задач. Используйте WorkManager для планирования фоновых задач, поскольку он предоставляет следующие преимущества:
- Пакетная обработка — задания объединяются для снижения энергопотребления батареи.
- Сохранение состояния — если устройство перезагружено, запланированные задания WorkManager выполняются после завершения перезагрузки.
- Критерии — задания могут выполняться в зависимости от условий, например, заряжается ли устройство или доступен ли Wi-Fi.
Для получения более подробной информации см. Руководство по фоновой обработке .
Не используйте AlarmManager для планирования операций по отсчету времени, которые действительны только во время работы приложения (другими словами, операция по отсчету времени должна быть отменена при выходе пользователя из приложения). В таких ситуациях используйте класс Handler , поскольку он проще в использовании и гораздо эффективнее.
Рекомендуем вам
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Залипание частичной блокировки пробуждения
- АНР
Механизм пробуждения (wakeups) в API AlarmManager позволяет разработчикам устанавливать будильник для пробуждения устройства в указанное время. Ваше приложение устанавливает будильник, вызывая один из методов set() в AlarmManager с флагом RTC_WAKEUP или ELAPSED_REALTIME_WAKEUP . Когда срабатывает будильник, устройство выходит из режима энергосбережения и удерживает частичную блокировку пробуждения , выполняя метод onReceive() или onAlarm() будильника. Если будильники срабатывают слишком часто, это может привести к разрядке батареи устройства.
Если ваше приложение чрезмерно часто выводит устройство из строя, вы можете воспользоваться инструкциями на этой странице, чтобы диагностировать и устранить проблему.
Устраните проблему
AlarmManager был представлен в ранних версиях платформы Android, но со временем многие сценарии использования, ранее требувшие AlarmManager теперь лучше удовлетворяются более новыми функциями, такими как WorkManager . В этом разделе приведены советы по уменьшению количества будильников, но в долгосрочной перспективе рассмотрите возможность миграции вашего приложения в соответствии с рекомендациями, изложенными в разделе лучших практик .
Определите места в вашем приложении, где вы планируете устанавливать будильники, и уменьшите частоту их срабатывания. Вот несколько советов:
Найдите вызовы различных методов
set()вAlarmManager, которые включают либо флагRTC_WAKEUP, либоELAPSED_REALTIME_WAKEUP.Мы рекомендуем включать название вашего пакета, класса или метода в имя тега вашего оповещения, чтобы вы могли легко определить место в исходном коде, где было установлено оповещение. Вот несколько дополнительных советов:
- В имени не следует указывать никакую личную информацию, например, адрес электронной почты. В противном случае устройство запишет в лог
_UNKNOWNвместо названия тревоги. - Не получайте имя класса или метода программно, например, вызывая
getName(), поскольку оно может быть обфусцировано Proguard. Вместо этого используйте жестко заданную строку. - Не добавляйте счетчик или уникальные идентификаторы к меткам тревожных сигналов. Система не сможет объединять тревожные сигналы, установленные таким образом, поскольку все они имеют уникальные идентификаторы.
- В имени не следует указывать никакую личную информацию, например, адрес электронной почты. В противном случае устройство запишет в лог
После устранения проблемы убедитесь, что будильники работают должным образом, выполнив следующую команду ADB :
adb shell dumpsys alarm
Эта команда предоставляет информацию о состоянии службы системы сигнализации на устройстве. Для получения дополнительной информации см. dumpsys .
Передовые методы
Используйте будильники только в том случае, если вашему приложению необходимо выполнить операцию, взаимодействующую с пользователем (например, отправить уведомление или оповестить пользователя). Список рекомендаций по использованию AlarmManager см. в разделе « Планирование будильников» .
Не используйте AlarmManager для планирования фоновых задач, особенно повторяющихся или сетевых фоновых задач. Используйте WorkManager для планирования фоновых задач, поскольку он предоставляет следующие преимущества:
- Пакетная обработка — задания объединяются для снижения энергопотребления батареи.
- Сохранение состояния — если устройство перезагружено, запланированные задания WorkManager выполняются после завершения перезагрузки.
- Критерии — задания могут выполняться в зависимости от условий, например, заряжается ли устройство или доступен ли Wi-Fi.
Для получения более подробной информации см. Руководство по фоновой обработке .
Не используйте AlarmManager для планирования операций по отсчету времени, которые действительны только во время работы приложения (другими словами, операция по отсчету времени должна быть отменена при выходе пользователя из приложения). В таких ситуациях используйте класс Handler , поскольку он проще в использовании и гораздо эффективнее.
Рекомендуем вам
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Залипание частичной блокировки пробуждения
- АНР
Механизм пробуждения (wakeups) в API AlarmManager позволяет разработчикам устанавливать будильник для пробуждения устройства в указанное время. Ваше приложение устанавливает будильник, вызывая один из методов set() в AlarmManager с флагом RTC_WAKEUP или ELAPSED_REALTIME_WAKEUP . Когда срабатывает будильник, устройство выходит из режима энергосбережения и удерживает частичную блокировку пробуждения , выполняя метод onReceive() или onAlarm() будильника. Если будильники срабатывают слишком часто, это может привести к разрядке батареи устройства.
Если ваше приложение чрезмерно часто выводит устройство из строя, вы можете воспользоваться инструкциями на этой странице, чтобы диагностировать и устранить проблему.
Устраните проблему
AlarmManager был представлен в ранних версиях платформы Android, но со временем многие сценарии использования, ранее требувшие AlarmManager теперь лучше удовлетворяются более новыми функциями, такими как WorkManager . В этом разделе приведены советы по уменьшению количества будильников, но в долгосрочной перспективе рассмотрите возможность миграции вашего приложения в соответствии с рекомендациями, изложенными в разделе лучших практик .
Определите места в вашем приложении, где вы планируете устанавливать будильники, и уменьшите частоту их срабатывания. Вот несколько советов:
Найдите вызовы различных методов
set()вAlarmManager, которые включают либо флагRTC_WAKEUP, либоELAPSED_REALTIME_WAKEUP.Мы рекомендуем включать название вашего пакета, класса или метода в имя тега вашего оповещения, чтобы вы могли легко определить место в исходном коде, где было установлено оповещение. Вот несколько дополнительных советов:
- В имени не следует указывать никакую личную информацию, например, адрес электронной почты. В противном случае устройство запишет в лог
_UNKNOWNвместо названия тревоги. - Не получайте имя класса или метода программно, например, вызывая
getName(), поскольку оно может быть обфусцировано Proguard. Вместо этого используйте жестко заданную строку. - Не добавляйте счетчик или уникальные идентификаторы к меткам тревожных сигналов. Система не сможет объединять тревожные сигналы, установленные таким образом, поскольку все они имеют уникальные идентификаторы.
- В имени не следует указывать никакую личную информацию, например, адрес электронной почты. В противном случае устройство запишет в лог
После устранения проблемы убедитесь, что будильники работают должным образом, выполнив следующую команду ADB :
adb shell dumpsys alarm
Эта команда предоставляет информацию о состоянии службы системы сигнализации на устройстве. Для получения дополнительной информации см. dumpsys .
Передовые методы
Используйте будильники только в том случае, если вашему приложению необходимо выполнить операцию, взаимодействующую с пользователем (например, отправить уведомление или оповестить пользователя). Список рекомендаций по использованию AlarmManager см. в разделе « Планирование будильников» .
Не используйте AlarmManager для планирования фоновых задач, особенно повторяющихся или сетевых фоновых задач. Используйте WorkManager для планирования фоновых задач, поскольку он предоставляет следующие преимущества:
- Пакетная обработка — задания объединяются для снижения энергопотребления батареи.
- Сохранение состояния — если устройство перезагружено, запланированные задания WorkManager выполняются после завершения перезагрузки.
- Критерии — задания могут выполняться в зависимости от условий, например, заряжается ли устройство или доступен ли Wi-Fi.
Для получения более подробной информации см. Руководство по фоновой обработке .
Не используйте AlarmManager для планирования операций по отсчету времени, которые действительны только во время работы приложения (другими словами, операция по отсчету времени должна быть отменена при выходе пользователя из приложения). В таких ситуациях используйте класс Handler , поскольку он проще в использовании и гораздо эффективнее.
Рекомендуем вам
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Залипание частичной блокировки пробуждения
- АНР