Подтвердить что ты не робот

Лучший способ периодически посещать опрос приложений Android в фоновом режиме

Возьмите приложение Gmail в качестве примера. Включен ли телефон или нет, он каждые 10 минут опроса загружает новые письма, которые, возможно, появились с момента последнего подтверждения.

Я знаю, как создать новую службу и привязать ее к ней. Но я вижу несколько способов сделать это:

  • Привязать один раз и запустить службу в бесконечном цикле, спящий в течение 10 минут между каждым циклом
  • Привязать и отпереть право, когда это будет сделано, планирование следующего связывания как-то через 10 минут
  • Использование класса AlarmManager для планирования будущих опросов

Что такое компромисс? Как это делает приложение Gmail?

Спасибо!

4b9b3361

Ответ 1

Приложение Gmail использует pushing, а не опрос. Я предлагаю использовать этот метод вместо этого, опрос - это убийца батареи в мобильных устройствах.

Чтобы реализовать pushing, посмотрите C2DM.

Если вы все еще хотите опросить, рекомендуемым способом было бы настроить периодическую тревогу в AlarmManager.

ОБНОВЛЕНИЕ. Google устарел C2DM и заменил его Google Cloud Messaging (GCM)

ОБНОВЛЕНИЕ. Google устарел GCM и заменил его Firebase Cloud Messaging (FCM)

Ответ 2

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

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